Lines Matching refs:rule

2  * lib/route/rule.c          Routing Rules
14 * @defgroup rule Routing Rules
23 #include <netlink/route/rule.h>
47 struct rtnl_rule *rule = nl_object_priv(c);
49 if (!rule)
52 nl_addr_put(rule->r_src);
53 nl_addr_put(rule->r_dst);
83 struct rtnl_rule *rule;
88 rule = rtnl_rule_alloc();
89 if (!rule) {
94 rule->ce_msgtype = n->nlmsg_type;
101 rule->r_family = family = r->rtm_family;
102 rule->r_type = r->rtm_type;
103 rule->r_dsfield = r->rtm_tos;
104 rule->r_src_len = r->rtm_src_len;
105 rule->r_dst_len = r->rtm_dst_len;
106 rule->r_table = r->rtm_table;
107 rule->ce_mask = (RULE_ATTR_FAMILY | RULE_ATTR_TYPE | RULE_ATTR_DSFIELD |
112 rule->r_prio = nla_get_u32(tb[RTA_PRIORITY]);
113 rule->ce_mask |= RULE_ATTR_PRIO;
117 if (!(rule->r_src = nl_addr_alloc_attr(tb[RTA_SRC], family)))
119 nl_addr_set_prefixlen(rule->r_src, r->rtm_src_len);
120 rule->ce_mask |= RULE_ATTR_SRC;
124 if (!(rule->r_dst = nl_addr_alloc_attr(tb[RTA_DST], family)))
126 nl_addr_set_prefixlen(rule->r_dst, r->rtm_dst_len);
127 rule->ce_mask |= RULE_ATTR_DST;
131 rule->r_mark = nla_get_u32(tb[RTA_PROTOINFO]);
132 rule->ce_mask |= RULE_ATTR_MARK;
136 nla_strlcpy(rule->r_iif, tb[RTA_IIF], IFNAMSIZ);
137 rule->ce_mask |= RULE_ATTR_IIF;
141 rule->r_realms = nla_get_u32(tb[RTA_FLOW]);
142 rule->ce_mask |= RULE_ATTR_REALMS;
146 rule->r_srcmap = nl_addr_alloc_attr(tb[RTA_GATEWAY], family);
147 if (!rule->r_srcmap)
149 rule->ce_mask |= RULE_ATTR_SRCMAP;
153 rule->r_table = nla_get_u32(tb[RTA_TABLE]);
154 rule->ce_mask |= RULE_ATTR_TABLE;
157 err = pp->pp_cb((struct nl_object *) rule, pp);
159 rtnl_rule_put(rule);
215 struct rtnl_rule *rule = (struct rtnl_rule *) obj;
220 if (rule->ce_mask & RULE_ATTR_SRCMAP)
222 nl_addr2str(rule->r_srcmap, buf, sizeof(buf)));
232 struct rtnl_rule *rule = (struct rtnl_rule *) obj;
235 nl_dump_line(p, "RULE_PRIORITY=%u\n", rule->r_prio);
237 nl_af2str(rule->r_family, buf, sizeof(buf)));
239 if (rule->ce_mask & RULE_ATTR_DST)
241 nl_addr2str(rule->r_dst, buf, sizeof(buf)));
243 if (rule->ce_mask & RULE_ATTR_DST_LEN)
244 nl_dump_line(p, "RULE_DSTLEN=%u\n", rule->r_dst_len);
246 if (rule->ce_mask & RULE_ATTR_SRC)
248 nl_addr2str(rule->r_src, buf, sizeof(buf)));
250 if (rule->ce_mask & RULE_ATTR_SRC_LEN)
251 nl_dump_line(p, "RULE_SRCLEN=%u\n", rule->r_src_len);
253 if (rule->ce_mask & RULE_ATTR_IIF)
254 nl_dump_line(p, "RULE_IIF=%s\n", rule->r_iif);
256 if (rule->ce_mask & RULE_ATTR_TABLE)
257 nl_dump_line(p, "RULE_TABLE=%u\n", rule->r_table);
259 if (rule->ce_mask & RULE_ATTR_REALMS)
260 nl_dump_line(p, "RULE_REALM=%u\n", rule->r_realms);
262 if (rule->ce_mask & RULE_ATTR_MARK)
263 nl_dump_line(p, "RULE_MARK=0x%" PRIx64 "\n", rule->r_mark);
265 if (rule->ce_mask & RULE_ATTR_DSFIELD)
266 nl_dump_line(p, "RULE_DSFIELD=%u\n", rule->r_dsfield);
268 if (rule->ce_mask & RULE_ATTR_TYPE)
270 nl_rtntype2str(rule->r_type, buf, sizeof(buf)));
272 if (rule->ce_mask & RULE_ATTR_SRCMAP)
274 nl_addr2str(rule->r_srcmap, buf, sizeof(buf)));
336 void rtnl_rule_put(struct rtnl_rule *rule)
338 nl_object_put((struct nl_object *) rule);
349 * Build a rule cache including all rules currently configured in the kernel.
354 * Allocates a new rule cache, initializes it properly and updates it
449 * Build netlink request message to add a new rule
450 * @arg tmpl template with data of new rule
454 * rule. The netlink message header isn't fully equipped with
469 * Add a new rule
504 * Build a netlink request message to delete a rule
505 * @arg rule rule to delete
508 * Builds a new netlink message requesting a deletion of a rule.
511 * or supplemented as needed. \a rule must point to an existing
516 int rtnl_rule_build_delete_request(struct rtnl_rule *rule, int flags,
519 return build_rule_msg(rule, RTM_DELRULE, flags, result);
523 * Delete a rule
525 * @arg rule rule to delete
534 int rtnl_rule_delete(struct nl_sock *sk, struct rtnl_rule *rule, int flags)
539 if ((err = rtnl_rule_build_delete_request(rule, flags, &msg)) < 0)
557 void rtnl_rule_set_family(struct rtnl_rule *rule, int family)
559 rule->r_family = family;
560 rule->ce_mask |= RULE_ATTR_FAMILY;
563 int rtnl_rule_get_family(struct rtnl_rule *rule)
565 if (rule->ce_mask & RULE_ATTR_FAMILY)
566 return rule->r_family;
571 void rtnl_rule_set_prio(struct rtnl_rule *rule, int prio)
573 rule->r_prio = prio;
574 rule->ce_mask |= RULE_ATTR_PRIO;
577 int rtnl_rule_get_prio(struct rtnl_rule *rule)
579 if (rule->ce_mask & RULE_ATTR_PRIO)
580 return rule->r_prio;
585 void rtnl_rule_set_mark(struct rtnl_rule *rule, uint64_t mark)
587 rule->r_mark = mark;
588 rule->ce_mask |= RULE_ATTR_MARK;
591 uint64_t rtnl_rule_get_mark(struct rtnl_rule *rule)
593 if (rule->ce_mask & RULE_ATTR_MARK)
594 return rule->r_mark;
599 void rtnl_rule_set_table(struct rtnl_rule *rule, int table)
601 rule->r_table = table;
602 rule->ce_mask |= RULE_ATTR_TABLE;
605 int rtnl_rule_get_table(struct rtnl_rule *rule)
607 if (rule->ce_mask & RULE_ATTR_TABLE)
608 return rule->r_table;
613 void rtnl_rule_set_dsfield(struct rtnl_rule *rule, int dsfield)
615 rule->r_dsfield = dsfield;
616 rule->ce_mask |= RULE_ATTR_DSFIELD;
619 int rtnl_rule_get_dsfield(struct rtnl_rule *rule)
621 if (rule->ce_mask & RULE_ATTR_DSFIELD)
622 return rule->r_dsfield;
627 void rtnl_rule_set_src_len(struct rtnl_rule *rule, int len)
629 rule->r_src_len = len;
630 if (rule->ce_mask & RULE_ATTR_SRC)
631 nl_addr_set_prefixlen(rule->r_src, len);
632 rule->ce_mask |= RULE_ATTR_SRC_LEN;
635 int rtnl_rule_get_src_len(struct rtnl_rule *rule)
637 if (rule->ce_mask & RULE_ATTR_SRC_LEN)
638 return rule->r_src_len;
643 void rtnl_rule_set_dst_len(struct rtnl_rule *rule, int len)
645 rule->r_dst_len = len;
646 if (rule->ce_mask & RULE_ATTR_DST)
647 nl_addr_set_prefixlen(rule->r_dst, len);
648 rule->ce_mask |= RULE_ATTR_DST_LEN;
651 int rtnl_rule_get_dst_len(struct rtnl_rule *rule)
653 if (rule->ce_mask & RULE_ATTR_DST_LEN)
654 return rule->r_dst_len;
659 static inline int __assign_addr(struct rtnl_rule *rule, struct nl_addr **pos,
662 if (rule->ce_mask & RULE_ATTR_FAMILY) {
663 if (new->a_family != rule->r_family)
666 rule->r_family = new->a_family;
675 rule->ce_mask |= (flag | RULE_ATTR_FAMILY);
680 int rtnl_rule_set_src(struct rtnl_rule *rule, struct nl_addr *src)
682 return __assign_addr(rule, &rule->r_src, src, &rule->r_src_len,
686 struct nl_addr *rtnl_rule_get_src(struct rtnl_rule *rule)
688 if (rule->ce_mask & RULE_ATTR_SRC)
689 return rule->r_src;
694 int rtnl_rule_set_dst(struct rtnl_rule *rule, struct nl_addr *dst)
696 return __assign_addr(rule, &rule->r_dst, dst, &rule->r_dst_len,
700 struct nl_addr *rtnl_rule_get_dst(struct rtnl_rule *rule)
702 if (rule->ce_mask & RULE_ATTR_DST)
703 return rule->r_dst;
708 int rtnl_rule_set_iif(struct rtnl_rule *rule, const char *dev)
713 strcpy(rule->r_iif, dev);
714 rule->ce_mask |= RULE_ATTR_IIF;
718 char *rtnl_rule_get_iif(struct rtnl_rule *rule)
720 if (rule->ce_mask & RULE_ATTR_IIF)
721 return rule->r_iif;
726 void rtnl_rule_set_action(struct rtnl_rule *rule, int type)
728 rule->r_type = type;
729 rule->ce_mask |= RULE_ATTR_TYPE;
732 int rtnl_rule_get_action(struct rtnl_rule *rule)
734 if (rule->ce_mask & RULE_ATTR_TYPE)
735 return rule->r_type;
740 void rtnl_rule_set_realms(struct rtnl_rule *rule, uint32_t realms)
742 rule->r_realms = realms;
743 rule->ce_mask |= RULE_ATTR_REALMS;
746 uint32_t rtnl_rule_get_realms(struct rtnl_rule *rule)
748 if (rule->ce_mask & RULE_ATTR_REALMS)
749 return rule->r_realms;
757 .oo_name = "route/rule",
773 .co_name = "route/rule",