]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Use correct encoding before printing shutdown msg
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Wed, 5 Jan 2022 13:05:04 +0000 (15:05 +0200)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 7 Jan 2022 20:35:38 +0000 (22:35 +0200)
Using `bgp shutdown message MSG...`.

Length should be decoded from the first byte, but it's decoded from the data
instead.

Before:

```
%NOTIFICATION: sent to neighbor 192.168.0.2 6/2 (Cease/Administratively Shutdown) 70 bytes 5b 54 49 43 4b 45 54 2d 31 2d 31 34 33 38 33 36 37 33 39 30 5d 20 73
```

After:

```
%NOTIFICATION: sent to neighbor 192.168.0.2 6/2 (Cease/Administratively Shutdown) "[TICKET-1-1438367390] software upgrade; Expected downtime for 2 hours;"
```

On receiving side:

```
"[TICKET-1-1438367390] software upgrade; Expected downtime for 2 hours;"
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
bgpd/bgpd.c

index 3921ad2367137bc0d51ba0b7f3a07d5e371b8cb0..6d0fd2fdd6b2ad9e8ed2d9818d058cd84942b39b 100644 (file)
@@ -4318,6 +4318,12 @@ void bgp_shutdown_enable(struct bgp *bgp, const char *msg)
 {
        struct peer *peer;
        struct listnode *node;
+       /* length(1) + message(N) */
+       uint8_t data[BGP_ADMIN_SHUTDOWN_MSG_LEN + 1];
+       size_t datalen = strlen(msg);
+
+       data[0] = datalen;
+       memcpy(data + 1, msg, datalen);
 
        /* do nothing if already shut down */
        if (CHECK_FLAG(bgp->flags, BGP_FLAG_SHUTDOWN))
@@ -4338,8 +4344,8 @@ void bgp_shutdown_enable(struct bgp *bgp, const char *msg)
                        if (msg)
                                bgp_notify_send_with_data(
                                        peer, BGP_NOTIFY_CEASE,
-                                       BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN,
-                                       (uint8_t *)(msg), strlen(msg));
+                                       BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN, data,
+                                       datalen + 1);
                        else
                                bgp_notify_send(
                                        peer, BGP_NOTIFY_CEASE,