Skip to content
Snippets Groups Projects
bgp.go 3.06 KiB
Newer Older
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
Oliver Herms's avatar
Oliver Herms committed
	MinUpdateLen      = 4
	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

	// NOTIFICATION Cease error SubCodes (RFC4486)
	MaxPrefReached                = 1
	AdminShut                     = 2
	PeerDeconfigured              = 3
	AdminReset                    = 4
	ConnectionRejected            = 5
	OtherConfigChange             = 8
	ConnectionCollisionResolution = 7
	OutOfResoutces                = 8
	IPv4AFI                     = 1
	IPv6AFI                     = 2
	UnicastSAFI                 = 1
	CapabilitiesParamType       = 2
	MultiProtocolCapabilityCode = 1
	AddPathCapabilityCode       = 69
	ASN4CapabilityCode          = 65
	AddPathReceive              = 1
	AddPathSend                 = 2
	AddPathSendReceive          = 3
	ASTransASN                  = 23456
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
Oliver Herms's avatar
Oliver Herms committed
	HoldTime      uint16
	BGPIdentifier uint32
	OptParmLen    uint8
Oliver Herms's avatar
Oliver Herms committed
}

type BGPNotification struct {
	ErrorCode    uint8
	ErrorSubcode uint8
}

type PathAttribute struct {
	Length         uint16
	Optional       bool
	Transitive     bool
	Partial        bool
	ExtendedLength bool
	TypeCode       uint8
	Value          interface{}
	Next           *PathAttribute
}