]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: fix error response to invalid BGP version number
authorLeonid Rosenboim <lrosenbo@wrs.com>
Fri, 7 Dec 2012 21:25:00 +0000 (21:25 +0000)
committerDavid Lamparter <equinox@opensourcerouting.org>
Mon, 14 Jan 2013 16:58:42 +0000 (17:58 +0100)
BGP4-ANVL 20.1 ANVL tries to open BGP with version 5 and expects correct
notification in response. Quagga sends notification, but with incorrect
information in it.

The data needs to be a 2-byte value, and for now we respond with 0004 for any
peer version other than 4.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
bgpd/bgp_packet.c

index 2d62c8dacc8c562350502c0879a77eb07f6bf778..968c8e4d835d5bbe9f7b6fc6cf42b71d7891d429 100644 (file)
@@ -1411,14 +1411,16 @@ bgp_open_receive (struct peer *peer, bgp_size_t size)
   /* Peer BGP version check. */
   if (version != BGP_VERSION_4)
     {
-      u_int8_t maxver = BGP_VERSION_4;
+      u_int16_t maxver = htons(BGP_VERSION_4);
+      /* XXX this reply may not be correct if version < 4  XXX */
       if (BGP_DEBUG (normal, NORMAL))
        zlog_debug ("%s bad protocol version, remote requested %d, local request %d",
                   peer->host, version, BGP_VERSION_4);
+      /* Data must be in network byte order here */
       bgp_notify_send_with_data (peer, 
                                 BGP_NOTIFY_OPEN_ERR, 
                                 BGP_NOTIFY_OPEN_UNSUP_VERSION,
-                                &maxver, 1);
+                                (u_int8_t *) &maxver, 2);
       return -1;
     }