summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArjen Zonneveld <arjen@bz2.nl>2016-12-02 13:20:18 +0100
committerAnders Broman <a.broman58@gmail.com>2016-12-13 08:59:30 +0000
commit79babc6f22879763d49ea2e802a44ace0e89bd53 (patch)
tree0f58cb3ed003bdb53fcc0943d75702db3192f356
parent8d59678483bc90d0fad356338e3dc413e4655585 (diff)
downloadwireshark-79babc6f22879763d49ea2e802a44ace0e89bd53.tar.gz
Add BGP dissector support for draft-ietf-idr-shutdown-01
Parse the communication bits of a BGP Cease NOTIFICATION: Border Gateway Protocol - NOTIFICATION Message Marker: ffffffffffffffffffffffffffffffff Length: 146 Type: NOTIFICATION Message (3) Major error Code: Cease (6) Minor error Code (Cease): Administratively Shutdown (2) BGP Shutdown Communication Length: 124 Shutdown Communication: NTT will perform maintenance on this router. This is tracked in TICKET-1-24824294. Contact noc@ntt.net for more information. Draft at https://tools.ietf.org/html/draft-ietf-idr-shutdown-01, sample file taken from from http://instituut.net/~job/shutdown.pcap Change-Id: I2ab633883cc69e560ff79cb6239e02fcffd71e10 Reviewed-on: https://code.wireshark.org/review/19144 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--epan/dissectors/packet-bgp.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/epan/dissectors/packet-bgp.c b/epan/dissectors/packet-bgp.c
index 716e548cd3..928fc420a4 100644
--- a/epan/dissectors/packet-bgp.c
+++ b/epan/dissectors/packet-bgp.c
@@ -1408,6 +1408,8 @@ static int hf_bgp_notify_minor_cease = -1;
static int hf_bgp_notify_minor_cap_msg = -1;
static int hf_bgp_notify_minor_unknown = -1;
static int hf_bgp_notify_data = -1;
+static int hf_bgp_notify_communication_length = -1;
+static int hf_bgp_notify_communication = -1;
/* BGP route refresh header field */
@@ -7435,6 +7437,8 @@ dissect_bgp_notification(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo)
int offset;
guint major_error;
proto_item *ti;
+ guint8 clen;
+ guint8 minor_cease;
hlen = tvb_get_ntohs(tvb, BGP_MARKER_SIZE);
offset = BGP_MARKER_SIZE + 2 + 1;
@@ -7476,7 +7480,17 @@ dissect_bgp_notification(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo)
/* only print if there is optional data */
if (hlen > BGP_MIN_NOTIFICATION_MSG_SIZE) {
- proto_tree_add_item(tree, hf_bgp_notify_data, tvb, offset, hlen - BGP_MIN_NOTIFICATION_MSG_SIZE, ENC_NA);
+ minor_cease = tvb_get_guint8(tvb, offset - 1);
+ clen = tvb_get_guint8(tvb, offset);
+ /* Might be a idr-shutdown communication, first byte is length, max length being 128) */
+ if (clen <= 128 && hlen - BGP_MIN_NOTIFICATION_MSG_SIZE - 1 == clen && major_error == BGP_MAJOR_ERROR_CEASE && minor_cease == 2) {
+ proto_tree_add_item(tree, hf_bgp_notify_communication_length, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(tree, hf_bgp_notify_communication, tvb, offset, hlen - BGP_MIN_NOTIFICATION_MSG_SIZE - 1, ENC_UTF_8|ENC_NA);
+ /* otherwise just dump the hex data */
+ } else {
+ proto_tree_add_item(tree, hf_bgp_notify_data, tvb, offset, hlen - BGP_MIN_NOTIFICATION_MSG_SIZE, ENC_NA);
+ }
}
}
@@ -8019,6 +8033,12 @@ proto_register_bgp(void)
NULL, 0x0, NULL, HFILL }},
{ &hf_bgp_notify_data,
{ "Data", "bgp.notify.minor_data", FT_BYTES, BASE_NONE,
+ NULL, 0x0, NULL, HFILL }},
+ { &hf_bgp_notify_communication_length,
+ { "BGP Shutdown Communication Length", "bgp.notify.communication_length", FT_UINT8, BASE_DEC,
+ NULL, 0x0, NULL, HFILL }},
+ { &hf_bgp_notify_communication,
+ { "Shutdown Communication", "bgp.notify.commmunication", FT_STRING, BASE_NONE,
NULL, 0x0, NULL, HFILL }},
/* Route Refresh */