diff options
Diffstat (limited to 'zebra/zebra_dplane.c')
| -rw-r--r-- | zebra/zebra_dplane.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index a5d672987d..0760b2ebb3 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -259,6 +259,7 @@ struct dplane_ctx_rule { uint8_t dsfield; struct prefix src_ip; struct prefix dst_ip; + uint8_t ip_proto; char ifname[INTERFACE_NAMSIZ + 1]; }; @@ -1929,6 +1930,20 @@ uint32_t dplane_ctx_rule_get_old_fwmark(const struct zebra_dplane_ctx *ctx) return ctx->u.rule.old.fwmark; } +uint8_t dplane_ctx_rule_get_ipproto(const struct zebra_dplane_ctx *ctx) +{ + DPLANE_CTX_VALID(ctx); + + return ctx->u.rule.new.ip_proto; +} + +uint8_t dplane_ctx_rule_get_old_ipproto(const struct zebra_dplane_ctx *ctx) +{ + DPLANE_CTX_VALID(ctx); + + return ctx->u.rule.old.ip_proto; +} + uint8_t dplane_ctx_rule_get_dsfield(const struct zebra_dplane_ctx *ctx) { DPLANE_CTX_VALID(ctx); @@ -2537,8 +2552,7 @@ static int dplane_ctx_pw_init(struct zebra_dplane_ctx *ctx, */ memcpy(&p.u, &pw->nexthop, sizeof(pw->nexthop)); p.family = pw->af; - p.prefixlen = ((pw->af == AF_INET) ? - IPV4_MAX_PREFIXLEN : IPV6_MAX_PREFIXLEN); + p.prefixlen = ((pw->af == AF_INET) ? IPV4_MAX_BITLEN : IPV6_MAX_BITLEN); afi = (pw->af == AF_INET) ? AFI_IP : AFI_IP6; table = zebra_vrf_table(afi, SAFI_UNICAST, pw->vrf_id); @@ -2637,6 +2651,7 @@ static void dplane_ctx_rule_init_single(struct dplane_ctx_rule *dplane_rule, dplane_rule->filter_bm = rule->rule.filter.filter_bm; dplane_rule->fwmark = rule->rule.filter.fwmark; dplane_rule->dsfield = rule->rule.filter.dsfield; + dplane_rule->ip_proto = rule->rule.filter.ip_proto; prefix_copy(&(dplane_rule->dst_ip), &rule->rule.filter.dst_ip); prefix_copy(&(dplane_rule->src_ip), &rule->rule.filter.src_ip); strlcpy(dplane_rule->ifname, rule->ifname, INTERFACE_NAMSIZ); @@ -2673,7 +2688,7 @@ static int dplane_ctx_rule_init(struct zebra_dplane_ctx *ctx, ctx->zd_is_update = (op == DPLANE_OP_RULE_UPDATE); ctx->zd_vrf_id = new_rule->vrf_id; - memcpy(ctx->zd_ifname, new_rule->ifname, sizeof(new_rule->ifname)); + strlcpy(ctx->zd_ifname, new_rule->ifname, sizeof(ctx->zd_ifname)); ctx->u.rule.sock = new_rule->sock; ctx->u.rule.unique = new_rule->rule.unique; @@ -3641,14 +3656,10 @@ enum zebra_dplane_result dplane_neigh_ip_update(enum dplane_op_e op, uint16_t state = 0; uint32_t update_flags; - if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) { - char buf1[PREFIX_STRLEN], buf2[PREFIX_STRLEN]; + if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) + zlog_debug("%s: init link ctx %s: ifp %s, link_ip %pIA ip %pIA", + __func__, dplane_op2str(op), ifp->name, link_ip, ip); - ipaddr2str(link_ip, buf1, sizeof(buf1)); - ipaddr2str(ip, buf2, sizeof(buf2)); - zlog_debug("init link ctx %s: ifp %s, ip %s link %s", - dplane_op2str(op), ifp->name, buf1, buf2); - } if (ndm_state == ZEBRA_NEIGH_STATE_REACHABLE) state = DPLANE_NUD_REACHABLE; else if (ndm_state == ZEBRA_NEIGH_STATE_FAILED) |
