Skip to content
Snippets Groups Projects
bgp.go 3.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • Oliver Herms's avatar
    Oliver Herms committed
    package packet
    
    const (
    
    Oliver Herms's avatar
    Oliver Herms committed
    	OctetLen       = 8
    	MaxASNsSegment = 255
    	BGP4Version    = 4
    
    Oliver Herms's avatar
    Oliver Herms committed
    	MinOpenLen     = 29
    
    Oliver Herms's avatar
    Oliver Herms committed
    
    
    	MarkerLen         = 16
    	HeaderLen         = 19
    	MinLen            = 19
    	MaxLen            = 4096
    	NLRIMaxLen        = 5
    
    	CommunityLen      = 4
    
    	LargeCommunityLen = 12
    
    Oliver Herms's avatar
    Oliver Herms committed
    
    	OpenMsg         = 1
    	UpdateMsg       = 2
    	NotificationMsg = 3
    	KeepaliveMsg    = 4
    
    	MessageHeaderError      = 1
    	OpenMessageError        = 2
    	UpdateMessageError      = 3
    	HoldTimeExpired         = 4
    	FiniteStateMachineError = 5
    	Cease                   = 6
    
    	// Msg Header Errors
    	ConnectionNotSync = 1
    	BadMessageLength  = 2
    	BadMessageType    = 3
    
    	// Open Msg Errors
    	UnsupportedVersionNumber     = 1
    	BadPeerAS                    = 2
    	BadBGPIdentifier             = 3
    	UnsupportedOptionalParameter = 4
    	DeprecatedOpenMsgError5      = 5
    	UnacceptableHoldTime         = 6
    
    	// Update Msg Errors
    	MalformedAttributeList    = 1
    	UnrecognizedWellKnownAttr = 2
    	MissingWellKnonAttr       = 3
    	AttrFlagsError            = 4
    	AttrLengthError           = 5
    	InvalidOriginAttr         = 6
    	DeprecatedUpdateMsgError7 = 7
    	InvalidNextHopAttr        = 8
    	OptionalAttrError         = 9
    	InvalidNetworkField       = 10
    	MalformedASPath           = 11
    
    
    	// Notification Msg Subcodes
    	AdministrativeShutdown = 2
    	AdministrativeReset    = 4
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    	// Attribute Type Codes
    
    Daniel Czerwonk's avatar
    Daniel Czerwonk committed
    	OriginAttr           = 1
    	ASPathAttr           = 2
    	NextHopAttr          = 3
    	MEDAttr              = 4
    	LocalPrefAttr        = 5
    	AtomicAggrAttr       = 6
    	AggregatorAttr       = 7
    	CommunitiesAttr      = 8
    	AS4PathAttr          = 17
    	AS4AggregatorAttr    = 18
    	LargeCommunitiesAttr = 32
    
    Oliver Herms's avatar
    Oliver Herms committed
    
    	// ORIGIN values
    	IGP        = 0
    	EGP        = 1
    	INCOMPLETE = 2
    
    	// ASPath Segment Types
    	ASSet      = 1
    	ASSequence = 2
    
    	// NOTIFICATION Cease error SubCodes (RFC4486)
    	MaxPrefReached                = 1
    	AdminShut                     = 2
    	PeerDeconfigured              = 3
    	AdminReset                    = 4
    	ConnectionRejected            = 5
    	OtherConfigChange             = 8
    	ConnectionCollisionResolution = 7
    	OutOfResoutces                = 8
    
    
    	IPv4AFI               = 1
    	UnicastSAFI           = 1
    	CapabilitiesParamType = 2
    	AddPathCapabilityCode = 69
    	AddPathReceive        = 1
    	AddPathSend           = 2
    	AddPathSendReceive    = 3
    
    Oliver Herms's avatar
    Oliver Herms committed
    )
    
    type BGPError struct {
    	ErrorCode    uint8
    	ErrorSubCode uint8
    	ErrorStr     string
    }
    
    func (b BGPError) Error() string {
    	return b.ErrorStr
    }
    
    type BGPMessage struct {
    	Header *BGPHeader
    	Body   interface{}
    }
    
    type BGPHeader struct {
    	Length uint16
    	Type   uint8
    }
    
    type BGPOpen struct {
    	Version       uint8
    	AS            uint16
    	HoldTime      uint16
    	BGPIdentifier uint32
    	OptParmLen    uint8
    
    Oliver Herms's avatar
    Oliver Herms committed
    }
    
    type BGPNotification struct {
    	ErrorCode    uint8
    	ErrorSubcode uint8
    }
    
    type BGPUpdate struct {
    	WithdrawnRoutesLen uint16
    	WithdrawnRoutes    *NLRI
    	TotalPathAttrLen   uint16
    	PathAttributes     *PathAttribute
    	NLRI               *NLRI
    }
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    type BGPUpdateAddPath struct {
    	WithdrawnRoutesLen uint16
    	WithdrawnRoutes    *NLRIAddPath
    	TotalPathAttrLen   uint16
    	PathAttributes     *PathAttribute
    	NLRI               *NLRIAddPath
    }
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    type PathAttribute struct {
    	Length         uint16
    	Optional       bool
    	Transitive     bool
    	Partial        bool
    	ExtendedLength bool
    	TypeCode       uint8
    	Value          interface{}
    	Next           *PathAttribute
    }
    
    type NLRI struct {
    
    Oliver Herms's avatar
    Oliver Herms committed
    	IP     uint32
    
    Oliver Herms's avatar
    Oliver Herms committed
    	Pfxlen uint8
    	Next   *NLRI
    }
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    type NLRIAddPath struct {
    	PathIdentifier uint32
    	IP             uint32
    	Pfxlen         uint8
    	Next           *NLRIAddPath
    }
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    type ASPath []ASPathSegment
    type ASPathSegment struct {
    	Type  uint8
    	Count uint8
    	ASNs  []uint32
    }
    
    type Aggretator struct {
    
    Oliver Herms's avatar
    Oliver Herms committed
    	ASN  uint16
    }