diff options
Diffstat (limited to 'packet/bgp/constant.go')
-rw-r--r-- | packet/bgp/constant.go | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/packet/bgp/constant.go b/packet/bgp/constant.go new file mode 100644 index 00000000..aa9b17b9 --- /dev/null +++ b/packet/bgp/constant.go @@ -0,0 +1,194 @@ +// Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package bgp + +import ( + "fmt" + "strings" +) + +const AS_TRANS = 23456 + +const BGP_PORT = 179 + +type FSMState int + +const ( + BGP_FSM_IDLE FSMState = iota + BGP_FSM_CONNECT + BGP_FSM_ACTIVE + BGP_FSM_OPENSENT + BGP_FSM_OPENCONFIRM + BGP_FSM_ESTABLISHED +) + +// partially taken from http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml +type Protocol int + +const ( + Unknown Protocol = iota + ICMP = 0x01 + IGMP = 0x02 + TCP = 0x06 + EGP = 0x08 + IGP = 0x09 + UDP = 0x11 + RSVP = 0x2e + GRE = 0x2f + OSPF = 0x59 + IPIP = 0x5e + PIM = 0x67 + SCTP = 0x84 +) + +var ProtocolNameMap = map[Protocol]string{ + Unknown: "unknown", + ICMP: "icmp", + IGMP: "igmp", + TCP: "tcp", + EGP: "egp", + IGP: "igp", + UDP: "udp", + RSVP: "rsvp", + GRE: "gre", + OSPF: "ospf", + IPIP: "ipip", + PIM: "pim", + SCTP: "sctp", +} + +var ProtocolValueMap = map[string]Protocol{ + ProtocolNameMap[ICMP]: ICMP, + ProtocolNameMap[IGMP]: IGMP, + ProtocolNameMap[TCP]: TCP, + ProtocolNameMap[EGP]: EGP, + ProtocolNameMap[IGP]: IGP, + ProtocolNameMap[UDP]: UDP, + ProtocolNameMap[RSVP]: RSVP, + ProtocolNameMap[GRE]: GRE, + ProtocolNameMap[OSPF]: OSPF, + ProtocolNameMap[IPIP]: IPIP, + ProtocolNameMap[PIM]: PIM, + ProtocolNameMap[SCTP]: SCTP, +} + +func (p Protocol) String() string { + name, ok := ProtocolNameMap[p] + if !ok { + return fmt.Sprintf("%d", p) + } + return name +} + +type TCPFlag int + +const ( + TCP_FLAG_FIN = 0x01 + TCP_FLAG_SYN = 0x02 + TCP_FLAG_RST = 0x04 + TCP_FLAG_PUSH = 0x08 + TCP_FLAG_ACK = 0x10 + TCP_FLAG_URGENT = 0x20 +) + +var TCPFlagNameMap = map[TCPFlag]string{ + TCP_FLAG_FIN: "fin", + TCP_FLAG_SYN: "syn", + TCP_FLAG_RST: "rst", + TCP_FLAG_PUSH: "push", + TCP_FLAG_ACK: "ack", + TCP_FLAG_URGENT: "urgent", +} + +var TCPFlagValueMap = map[string]TCPFlag{ + TCPFlagNameMap[TCP_FLAG_FIN]: TCP_FLAG_FIN, + TCPFlagNameMap[TCP_FLAG_SYN]: TCP_FLAG_SYN, + TCPFlagNameMap[TCP_FLAG_RST]: TCP_FLAG_RST, + TCPFlagNameMap[TCP_FLAG_PUSH]: TCP_FLAG_PUSH, + TCPFlagNameMap[TCP_FLAG_ACK]: TCP_FLAG_ACK, + TCPFlagNameMap[TCP_FLAG_URGENT]: TCP_FLAG_URGENT, +} + +func (f TCPFlag) String() string { + ss := make([]string, 0, 6) + for _, v := range []TCPFlag{TCP_FLAG_FIN, TCP_FLAG_SYN, TCP_FLAG_RST, TCP_FLAG_PUSH, TCP_FLAG_ACK, TCP_FLAG_URGENT} { + if f&v > 0 { + ss = append(ss, TCPFlagNameMap[v]) + } + } + return strings.Join(ss, "|") +} + +type EthernetType int + +const ( + IPv4 EthernetType = 0x0800 + ARP EthernetType = 0x0806 + RARP EthernetType = 0x8035 + VMTP EthernetType = 0x805B + APPLE_TALK EthernetType = 0x809B + AARP EthernetType = 0x80F3 + IPX EthernetType = 0x8137 + SNMP EthernetType = 0x814C + NET_BIOS EthernetType = 0x8191 + XTP EthernetType = 0x817D + IPv6 EthernetType = 0x86DD + PPPoE_DISCOVERY EthernetType = 0x8863 + PPPoE_SESSION EthernetType = 0x8864 + LOOPBACK EthernetType = 0x9000 +) + +var EthernetTypeNameMap = map[EthernetType]string{ + IPv4: "ipv4", + ARP: "arp", + RARP: "rarp", + VMTP: "vmtp", + APPLE_TALK: "apple-talk", + AARP: "aarp", + IPX: "ipx", + SNMP: "snmp", + NET_BIOS: "net-bios", + XTP: "xtp", + IPv6: "ipv6", + PPPoE_DISCOVERY: "pppoe-discovery", + PPPoE_SESSION: "pppoe-session", + LOOPBACK: "loopback", +} + +var EthernetTypeValueMap = map[string]EthernetType{ + EthernetTypeNameMap[IPv4]: IPv4, + EthernetTypeNameMap[ARP]: ARP, + EthernetTypeNameMap[RARP]: RARP, + EthernetTypeNameMap[VMTP]: VMTP, + EthernetTypeNameMap[APPLE_TALK]: APPLE_TALK, + EthernetTypeNameMap[AARP]: AARP, + EthernetTypeNameMap[IPX]: IPX, + EthernetTypeNameMap[SNMP]: SNMP, + EthernetTypeNameMap[NET_BIOS]: NET_BIOS, + EthernetTypeNameMap[XTP]: XTP, + EthernetTypeNameMap[IPv6]: IPv6, + EthernetTypeNameMap[PPPoE_DISCOVERY]: PPPoE_DISCOVERY, + EthernetTypeNameMap[PPPoE_SESSION]: PPPoE_SESSION, + EthernetTypeNameMap[LOOPBACK]: LOOPBACK, +} + +func (t EthernetType) String() string { + n, ok := EthernetTypeNameMap[t] + if !ok { + return fmt.Sprintf("%d", t) + } + return n +} |