diff --git a/protocols/bgp/packet/bgp.go b/protocols/bgp/packet/bgp.go index 41a2113f8e6cb85cb0250d0333908071dc03fd79..3b6e0129a15644a975a2ef92b8afef57983856e2 100644 --- a/protocols/bgp/packet/bgp.go +++ b/protocols/bgp/packet/bgp.go @@ -50,6 +50,10 @@ const ( InvalidNetworkField = 10 MalformedASPath = 11 + // Notification Msg Subcodes + AdministrativeShutdown = 2 + AdministrativeReset = 4 + // Attribute Type Codes OriginAttr = 1 ASPathAttr = 2 diff --git a/protocols/bgp/packet/decoder.go b/protocols/bgp/packet/decoder.go index 961789b3cfdd43b0aae606e2a693ceef88a315b9..31583bf1b68257625dfaa3d8b8e40893982d6713 100644 --- a/protocols/bgp/packet/decoder.go +++ b/protocols/bgp/packet/decoder.go @@ -114,7 +114,7 @@ func decodeNotificationMsg(buf *bytes.Buffer) (*BGPNotification, error) { return invalidErrCode(msg) } case Cease: - if msg.ErrorSubcode != 0 { + if !(msg.ErrorSubcode == 0 || msg.ErrorSubcode == AdministrativeShutdown || msg.ErrorSubcode == AdministrativeReset) { return invalidErrCode(msg) } default: