diff options
Diffstat (limited to '')
-rw-r--r-- | zebra/zebra_static.c | 18 | ||||
-rw-r--r-- | zebra/zebra_static.h | 14 | ||||
-rw-r--r-- | zebra/zebra_vty.c | 22 |
3 files changed, 37 insertions, 17 deletions
diff --git a/zebra/zebra_static.c b/zebra/zebra_static.c index ec6d40632..658f060ff 100644 --- a/zebra/zebra_static.c +++ b/zebra/zebra_static.c @@ -45,6 +45,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p, struct route_table *table; struct prefix nh_p; struct nexthop *nexthop = NULL; + enum blackhole_type bh_type = 0; /* Lookup table. */ table = zebra_vrf_table(afi, safi, si->vrf_id); @@ -52,6 +53,17 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p, return; memset(&nh_p, 0, sizeof(nh_p)); + if (si->type == STATIC_BLACKHOLE) { + switch (si->bh_type) { + case STATIC_BLACKHOLE_DROP: + case STATIC_BLACKHOLE_NULL: + bh_type = BLACKHOLE_NULL; + break; + case STATIC_BLACKHOLE_REJECT: + bh_type = BLACKHOLE_REJECT; + break; + } + } /* Lookup existing route */ rn = srcdest_rnode_get(table, p, src_p); @@ -92,7 +104,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p, break; case STATIC_BLACKHOLE: nexthop = route_entry_nexthop_blackhole_add( - re, si->bh_type); + re, bh_type); break; case STATIC_IPV6_GATEWAY: nexthop = route_entry_nexthop_ipv6_add(re, @@ -168,7 +180,7 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p, break; case STATIC_BLACKHOLE: nexthop = route_entry_nexthop_blackhole_add( - re, si->bh_type); + re, bh_type); break; case STATIC_IPV6_GATEWAY: nexthop = route_entry_nexthop_ipv6_add(re, @@ -363,7 +375,7 @@ void static_uninstall_route(afi_t afi, safi_t safi, struct prefix *p, int static_add_route(afi_t afi, safi_t safi, u_char type, struct prefix *p, struct prefix_ipv6 *src_p, union g_addr *gate, - const char *ifname, enum blackhole_type bh_type, + const char *ifname, enum static_blackhole_type bh_type, route_tag_t tag, u_char distance, struct zebra_vrf *zvrf, struct static_nh_label *snh_label) { diff --git a/zebra/zebra_static.h b/zebra/zebra_static.h index 458594a28..68fe73b0a 100644 --- a/zebra/zebra_static.h +++ b/zebra/zebra_static.h @@ -31,6 +31,12 @@ struct static_nh_label { mpls_label_t label[MPLS_MAX_LABELS]; }; +enum static_blackhole_type { + STATIC_BLACKHOLE_DROP = 0, + STATIC_BLACKHOLE_NULL, + STATIC_BLACKHOLE_REJECT +}; + typedef enum { STATIC_IFNAME, STATIC_IPV4_GATEWAY, @@ -61,7 +67,7 @@ struct static_route { /* * Nexthop value. */ - enum blackhole_type bh_type; + enum static_blackhole_type bh_type; union g_addr addr; ifindex_t ifindex; @@ -80,9 +86,9 @@ extern void static_uninstall_route(afi_t afi, safi_t safi, struct prefix *p, extern int static_add_route(afi_t, safi_t safi, u_char type, struct prefix *p, struct prefix_ipv6 *src_p, union g_addr *gate, - const char *ifname, enum blackhole_type bh_type, - route_tag_t tag, u_char distance, - struct zebra_vrf *zvrf, + const char *ifname, + enum static_blackhole_type bh_type, route_tag_t tag, + u_char distance, struct zebra_vrf *zvrf, struct static_nh_label *snh_label); extern int static_delete_route(afi_t, safi_t safi, u_char type, diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 95ba19b1f..3141782c5 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -74,7 +74,7 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi, union g_addr gate; union g_addr *gatep = NULL; struct in_addr mask; - enum blackhole_type bh_type = 0; + enum static_blackhole_type bh_type = 0; route_tag_t tag = 0; struct zebra_vrf *zvrf; u_char type; @@ -169,14 +169,13 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi, if (flag_str) { switch (flag_str[0]) { case 'r': - case 'R': /* XXX */ - bh_type = BLACKHOLE_REJECT; + bh_type = STATIC_BLACKHOLE_REJECT; break; case 'n': - case 'N' /* XXX */: + bh_type = STATIC_BLACKHOLE_NULL; + break; case 'b': - case 'B': /* XXX */ - bh_type = BLACKHOLE_NULL; + bh_type = STATIC_BLACKHOLE_DROP; break; default: vty_out(vty, "%% Malformed flag %s \n", flag_str); @@ -1712,12 +1711,15 @@ static int static_config(struct vty *vty, afi_t afi, safi_t safi, break; case STATIC_BLACKHOLE: switch (si->bh_type) { - case BLACKHOLE_REJECT: - vty_out(vty, " reject"); - break; - default: + case STATIC_BLACKHOLE_DROP: vty_out(vty, " blackhole"); break; + case STATIC_BLACKHOLE_NULL: + vty_out(vty, " null0"); + break; + case STATIC_BLACKHOLE_REJECT: + vty_out(vty, " reject"); + break; } break; case STATIC_IPV4_GATEWAY_IFNAME: |