summaryrefslogtreecommitdiffhomepage
path: root/packet/bgp/constant.go
diff options
context:
space:
mode:
Diffstat (limited to 'packet/bgp/constant.go')
-rw-r--r--packet/bgp/constant.go194
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
+}