summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_attr.c19
-rw-r--r--lib/netns_linux.c2
-rw-r--r--scripts/coccinelle/void_no_return.cocci9
-rw-r--r--zebra/zapi_msg.c4
4 files changed, 23 insertions, 11 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index 53a096753e..47da8fcb88 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -3230,6 +3230,8 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi,
&& (safi == SAFI_UNICAST || safi == SAFI_LABELED_UNICAST
|| safi == SAFI_MPLS_VPN || safi == SAFI_MULTICAST))
nh_afi = peer_cap_enhe(peer, afi, safi) ? AFI_IP6 : AFI_IP;
+ else if (safi == SAFI_FLOWSPEC)
+ nh_afi = afi;
else
nh_afi = BGP_NEXTHOP_AFI_FROM_NHLEN(attr->mp_nexthop_len);
@@ -3256,7 +3258,12 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi,
stream_put(s, &attr->mp_nexthop_global_in, 4);
break;
case SAFI_FLOWSPEC:
- stream_putc(s, 0); /* no nexthop for flowspec */
+ if (attr->mp_nexthop_len == 0)
+ stream_putc(s, 0); /* no nexthop for flowspec */
+ else {
+ stream_putc(s, attr->mp_nexthop_len);
+ stream_put_ipv4(s, attr->nexthop.s_addr);
+ }
default:
break;
}
@@ -3350,13 +3357,9 @@ void bgp_packet_mpattr_prefix(struct stream *s, afi_t afi, safi_t safi,
stream_put_labeled_prefix(s, p, label, addpath_encode,
addpath_tx_id);
} else if (safi == SAFI_FLOWSPEC) {
- if (PSIZE (p->prefixlen)+2 < FLOWSPEC_NLRI_SIZELIMIT)
- stream_putc(s, PSIZE (p->prefixlen)+2);
- else
- stream_putw(s, (PSIZE (p->prefixlen)+2)|(0xf<<12));
- stream_putc(s, 2);/* Filter type */
- stream_putc(s, p->prefixlen);/* Prefix length */
- stream_put(s, &p->u.prefix, PSIZE (p->prefixlen));
+ stream_putc(s, p->u.prefix_flowspec.prefixlen);
+ stream_put(s, (const void *)p->u.prefix_flowspec.ptr,
+ p->u.prefix_flowspec.prefixlen);
} else
stream_put_prefix_addpath(s, p, addpath_encode, addpath_tx_id);
}
diff --git a/lib/netns_linux.c b/lib/netns_linux.c
index d1a31ae35f..4d4376250f 100644
--- a/lib/netns_linux.c
+++ b/lib/netns_linux.c
@@ -371,7 +371,7 @@ int ns_enable(struct ns *ns, void (*func)(ns_id_t, void *))
void ns_disable(struct ns *ns)
{
- return ns_disable_internal(ns);
+ ns_disable_internal(ns);
}
struct ns *ns_lookup(ns_id_t ns_id)
diff --git a/scripts/coccinelle/void_no_return.cocci b/scripts/coccinelle/void_no_return.cocci
new file mode 100644
index 0000000000..7da9e73933
--- /dev/null
+++ b/scripts/coccinelle/void_no_return.cocci
@@ -0,0 +1,9 @@
+@@
+identifier f;
+expression e;
+@@
+void f(...) {
+ ...
+- return
+ e;
+}
diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c
index 83b8b8cb66..4d0e34561a 100644
--- a/zebra/zapi_msg.c
+++ b/zebra/zapi_msg.c
@@ -2586,14 +2586,14 @@ static void zserv_error_no_vrf(ZAPI_HANDLER_ARGS)
zlog_debug("ZAPI message specifies unknown VRF: %d",
hdr->vrf_id);
- return zsend_error_msg(client, ZEBRA_NO_VRF, hdr);
+ zsend_error_msg(client, ZEBRA_NO_VRF, hdr);
}
static void zserv_error_invalid_msg_type(ZAPI_HANDLER_ARGS)
{
zlog_info("Zebra received unknown command %d", hdr->command);
- return zsend_error_msg(client, ZEBRA_INVALID_MSG_TYPE, hdr);
+ zsend_error_msg(client, ZEBRA_INVALID_MSG_TYPE, hdr);
}
void (*const zserv_handlers[])(ZAPI_HANDLER_ARGS) = {