summaryrefslogtreecommitdiff
path: root/bgpd/bgp_packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_packet.c')
-rw-r--r--bgpd/bgp_packet.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index a7b2bc3458..10e96497fb 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -587,7 +587,7 @@ void bgp_open_send(struct peer *peer)
* @param peer
* @return 0
*/
-static int bgp_write_notify(struct peer *peer)
+static void bgp_write_notify(struct peer *peer)
{
int ret, val;
uint8_t type;
@@ -597,7 +597,7 @@ static int bgp_write_notify(struct peer *peer)
s = stream_fifo_pop(peer->obuf);
if (!s)
- return 0;
+ return;
assert(stream_get_endp(s) >= BGP_HEADER_SIZE);
@@ -617,7 +617,7 @@ static int bgp_write_notify(struct peer *peer)
if (ret <= 0) {
stream_free(s);
BGP_EVENT_ADD(peer, TCP_fatal_error);
- return 0;
+ return;
}
/* Disable Nagle, make NOTIFY packet go out right away */
@@ -649,8 +649,6 @@ static int bgp_write_notify(struct peer *peer)
BGP_EVENT_ADD(peer, BGP_Stop);
stream_free(s);
-
- return 0;
}
/*
@@ -1142,6 +1140,15 @@ static int bgp_open_receive(struct peer *peer, bgp_size_t size)
return BGP_Stop;
}
+ /* Codification of AS 0 Processing */
+ if (remote_as == BGP_AS_ZERO) {
+ flog_err(EC_BGP_PKT_OPEN, "%s bad OPEN, got AS set to 0",
+ peer->host);
+ bgp_notify_send(peer, BGP_NOTIFY_OPEN_ERR,
+ BGP_NOTIFY_OPEN_BAD_PEER_AS);
+ return BGP_Stop;
+ }
+
if (remote_as == BGP_AS_TRANS) {
/* Take the AS4 from the capability. We must have received the
* capability now! Otherwise we have a asn16 peer who uses
@@ -2328,7 +2335,7 @@ int bgp_process_packet(struct thread *thread)
flog_err(
EC_BGP_PKT_OPEN,
"%s: BGP OPEN receipt failed for peer: %s",
- __FUNCTION__, peer->host);
+ __func__, peer->host);
break;
case BGP_MSG_UPDATE:
atomic_fetch_add_explicit(&peer->update_in, 1,
@@ -2339,7 +2346,7 @@ int bgp_process_packet(struct thread *thread)
flog_err(
EC_BGP_UPDATE_RCV,
"%s: BGP UPDATE receipt failed for peer: %s",
- __FUNCTION__, peer->host);
+ __func__, peer->host);
break;
case BGP_MSG_NOTIFY:
atomic_fetch_add_explicit(&peer->notify_in, 1,
@@ -2349,7 +2356,7 @@ int bgp_process_packet(struct thread *thread)
flog_err(
EC_BGP_NOTIFY_RCV,
"%s: BGP NOTIFY receipt failed for peer: %s",
- __FUNCTION__, peer->host);
+ __func__, peer->host);
break;
case BGP_MSG_KEEPALIVE:
peer->readtime = monotime(NULL);
@@ -2360,7 +2367,7 @@ int bgp_process_packet(struct thread *thread)
flog_err(
EC_BGP_KEEP_RCV,
"%s: BGP KEEPALIVE receipt failed for peer: %s",
- __FUNCTION__, peer->host);
+ __func__, peer->host);
break;
case BGP_MSG_ROUTE_REFRESH_NEW:
case BGP_MSG_ROUTE_REFRESH_OLD:
@@ -2371,7 +2378,7 @@ int bgp_process_packet(struct thread *thread)
flog_err(
EC_BGP_RFSH_RCV,
"%s: BGP ROUTEREFRESH receipt failed for peer: %s",
- __FUNCTION__, peer->host);
+ __func__, peer->host);
break;
case BGP_MSG_CAPABILITY:
atomic_fetch_add_explicit(&peer->dynamic_cap_in, 1,
@@ -2381,7 +2388,7 @@ int bgp_process_packet(struct thread *thread)
flog_err(
EC_BGP_CAP_RCV,
"%s: BGP CAPABILITY receipt failed for peer: %s",
- __FUNCTION__, peer->host);
+ __func__, peer->host);
break;
default:
/* Suppress uninitialized variable warning */