static int rule_dump_xml(struct nl_object *obj, struct nl_dump_params *p) { struct rtnl_rule *rule = (struct rtnl_rule *) obj; char buf[128]; int line = 0; dp_dump_line(p, line++, "<rule>\n"); dp_dump_line(p, line++, " <priority>%u</priority>\n", rule->r_prio); dp_dump_line(p, line++, " <family>%s</family>\n", nl_af2str(rule->r_family, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_DST) dp_dump_line(p, line++, " <dst>%s</dst>\n", nl_addr2str(rule->r_dst, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_DST_LEN) dp_dump_line(p, line++, " <dstlen>%u</dstlen>\n", rule->r_dst_len); if (rule->ce_mask & RULE_ATTR_SRC) dp_dump_line(p, line++, " <src>%s</src>\n", nl_addr2str(rule->r_src, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_SRC_LEN) dp_dump_line(p, line++, " <srclen>%u</srclen>\n", rule->r_src_len); if (rule->ce_mask & RULE_ATTR_IIF) dp_dump_line(p, line++, " <iif>%s</iif>\n", rule->r_iif); if (rule->ce_mask & RULE_ATTR_TABLE) dp_dump_line(p, line++, " <table>%u</table>\n", rule->r_table); if (rule->ce_mask & RULE_ATTR_REALMS) dp_dump_line(p, line++, " <realms>%u</realms>\n", rule->r_realms); if (rule->ce_mask & RULE_ATTR_MARK) dp_dump_line(p, line++, " <mark>%" PRIx64 "</mark>\n", rule->r_mark); if (rule->ce_mask & RULE_ATTR_DSFIELD) dp_dump_line(p, line++, " <dsfield>%u</dsfield>\n", rule->r_dsfield); if (rule->ce_mask & RULE_ATTR_TYPE) dp_dump_line(p, line++, "<type>%s</type>\n", nl_rtntype2str(rule->r_type, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_SRCMAP) dp_dump_line(p, line++, "<srcmap>%s</srcmap>\n", nl_addr2str(rule->r_srcmap, buf, sizeof(buf))); dp_dump_line(p, line++, "</rule>\n"); return line; }
static int rule_dump_env(struct nl_object *obj, struct nl_dump_params *p) { struct rtnl_rule *rule = (struct rtnl_rule *) obj; char buf[128]; int line = 0; dp_dump_line(p, line++, "RULE_PRIORITY=%u\n", rule->r_prio); dp_dump_line(p, line++, "RULE_FAMILY=%s\n", nl_af2str(rule->r_family, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_DST) dp_dump_line(p, line++, "RULE_DST=%s\n", nl_addr2str(rule->r_dst, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_DST_LEN) dp_dump_line(p, line++, "RULE_DSTLEN=%u\n", rule->r_dst_len); if (rule->ce_mask & RULE_ATTR_SRC) dp_dump_line(p, line++, "RULE_SRC=%s\n", nl_addr2str(rule->r_src, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_SRC_LEN) dp_dump_line(p, line++, "RULE_SRCLEN=%u\n", rule->r_src_len); if (rule->ce_mask & RULE_ATTR_IIF) dp_dump_line(p, line++, "RULE_IIF=%s\n", rule->r_iif); if (rule->ce_mask & RULE_ATTR_TABLE) dp_dump_line(p, line++, "RULE_TABLE=%u\n", rule->r_table); if (rule->ce_mask & RULE_ATTR_REALMS) dp_dump_line(p, line++, "RULE_REALM=%u\n", rule->r_realms); if (rule->ce_mask & RULE_ATTR_MARK) dp_dump_line(p, line++, "RULE_MARK=0x%" PRIx64 "\n", rule->r_mark); if (rule->ce_mask & RULE_ATTR_DSFIELD) dp_dump_line(p, line++, "RULE_DSFIELD=%u\n", rule->r_dsfield); if (rule->ce_mask & RULE_ATTR_TYPE) dp_dump_line(p, line++, "RULE_TYPE=%s\n", nl_rtntype2str(rule->r_type, buf, sizeof(buf))); if (rule->ce_mask & RULE_ATTR_SRCMAP) dp_dump_line(p, line++, "RULE_SRCMAP=%s\n", nl_addr2str(rule->r_srcmap, buf, sizeof(buf))); return line; }
static void result_dump_line(struct nl_object *obj, struct nl_dump_params *p) { struct flnl_result *res = (struct flnl_result *) obj; char buf[256]; nl_dump_line(p, "table %s prefixlen %u next-hop-selector %u\n", rtnl_route_table2str(res->fr_table_id, buf, sizeof(buf)), res->fr_prefixlen, res->fr_nh_sel); nl_dump_line(p, "type %s ", nl_rtntype2str(res->fr_type, buf, sizeof(buf))); nl_dump(p, "scope %s error %s (%d)\n", rtnl_scope2str(res->fr_scope, buf, sizeof(buf)), strerror_r(-res->fr_error, buf, sizeof(buf)), res->fr_error); }
static int result_dump_brief(struct nl_object *obj, struct nl_dump_params *p) { struct flnl_result *res = (struct flnl_result *) obj; char buf[128]; int line = 1; dp_dump(p, "table %s prefixlen %u next-hop-selector %u\n", rtnl_route_table2str(res->fr_table_id, buf, sizeof(buf)), res->fr_prefixlen, res->fr_nh_sel); dp_dump_line(p, line++, "type %s ", nl_rtntype2str(res->fr_type, buf, sizeof(buf))); dp_dump(p, "scope %s error %s (%d)\n", rtnl_scope2str(res->fr_scope, buf, sizeof(buf)), strerror(-res->fr_error), res->fr_error); return line; }
static void rule_dump_line(struct nl_object *o, struct nl_dump_params *p) { struct rtnl_rule *r = (struct rtnl_rule *) o; char buf[128]; nl_dump_line(p, "%8d ", (r->ce_mask & RULE_ATTR_PRIO) ? r->r_prio : 0); nl_dump(p, "%s ", nl_af2str(r->r_family, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_SRC) nl_dump(p, "from %s ", nl_addr2str(r->r_src, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_DST) nl_dump(p, "to %s ", nl_addr2str(r->r_dst, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_DSFIELD) nl_dump(p, "tos %u ", r->r_dsfield); if (r->ce_mask & (RULE_ATTR_MARK | RULE_ATTR_MASK)) nl_dump(p, "mark %#x/%#x", r->r_mark, r->r_mask); if (r->ce_mask & RULE_ATTR_IIFNAME) nl_dump(p, "iif %s ", r->r_iifname); if (r->ce_mask & RULE_ATTR_OIFNAME) nl_dump(p, "oif %s ", r->r_oifname); if (r->ce_mask & RULE_ATTR_TABLE) nl_dump(p, "lookup %s ", rtnl_route_table2str(r->r_table, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_FLOW) nl_dump(p, "flow %s ", rtnl_realms2str(r->r_flow, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_GOTO) nl_dump(p, "goto %u ", r->r_goto); if (r->ce_mask & RULE_ATTR_ACTION) nl_dump(p, "action %s", nl_rtntype2str(r->r_action, buf, sizeof(buf))); nl_dump(p, "\n"); }
static int rule_dump_brief(struct nl_object *o, struct nl_dump_params *p) { struct rtnl_rule *r = (struct rtnl_rule *) o; char buf[128]; if (r->ce_mask & RULE_ATTR_PRIO) dp_dump(p, "%d:\t", r->r_prio); else dp_dump(p, "0:\t"); if (r->ce_mask & RULE_ATTR_SRC) dp_dump(p, "from %s ", nl_addr2str(r->r_src, buf, sizeof(buf))); else if (r->ce_mask & RULE_ATTR_SRC_LEN && r->r_src_len) dp_dump(p, "from 0/%d ", r->r_src_len); if (r->ce_mask & RULE_ATTR_DST) dp_dump(p, "to %s ", nl_addr2str(r->r_dst, buf, sizeof(buf))); else if (r->ce_mask & RULE_ATTR_DST_LEN && r->r_dst_len) dp_dump(p, "to 0/%d ", r->r_dst_len); if (r->ce_mask & RULE_ATTR_DSFIELD && r->r_dsfield) dp_dump(p, "tos %d ", r->r_dsfield); if (r->ce_mask & RULE_ATTR_MARK) dp_dump(p, "mark %" PRIx64 , r->r_mark); if (r->ce_mask & RULE_ATTR_IIF) dp_dump(p, "iif %s ", r->r_iif); if (r->ce_mask & RULE_ATTR_TABLE) dp_dump(p, "lookup %s ", rtnl_route_table2str(r->r_table, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_REALMS) dp_dump(p, "realms %s ", rtnl_realms2str(r->r_realms, buf, sizeof(buf))); dp_dump(p, "action %s\n", nl_rtntype2str(r->r_type, buf, sizeof(buf))); return 1; }
static void rule_dump_line(struct nl_object *o, struct nl_dump_params *p) { struct rtnl_rule *r = (struct rtnl_rule *) o; char buf[128]; nl_dump_line(p, "%8d ", (r->ce_mask & RULE_ATTR_PRIO) ? r->r_prio : 0); nl_dump(p, "%s ", nl_af2str(r->r_family, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_SRC) nl_dump(p, "from %s ", nl_addr2str(r->r_src, buf, sizeof(buf))); else if (r->ce_mask & RULE_ATTR_SRC_LEN && r->r_src_len) nl_dump(p, "from 0/%d ", r->r_src_len); if (r->ce_mask & RULE_ATTR_DST) nl_dump(p, "to %s ", nl_addr2str(r->r_dst, buf, sizeof(buf))); else if (r->ce_mask & RULE_ATTR_DST_LEN && r->r_dst_len) nl_dump(p, "to 0/%d ", r->r_dst_len); if (r->ce_mask & RULE_ATTR_DSFIELD && r->r_dsfield) nl_dump(p, "tos %d ", r->r_dsfield); if (r->ce_mask & RULE_ATTR_MARK) nl_dump(p, "mark %" PRIx64 , r->r_mark); if (r->ce_mask & RULE_ATTR_IIF) nl_dump(p, "iif %s ", r->r_iif); if (r->ce_mask & RULE_ATTR_TABLE) nl_dump(p, "lookup %s ", rtnl_route_table2str(r->r_table, buf, sizeof(buf))); if (r->ce_mask & RULE_ATTR_REALMS) nl_dump(p, "realms %s ", rtnl_realms2str(r->r_realms, buf, sizeof(buf))); nl_dump(p, "action %s\n", nl_rtntype2str(r->r_type, buf, sizeof(buf))); }