summaryrefslogtreecommitdiffhomepage
path: root/gobmpd
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-09-15 09:45:09 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-09-15 09:45:09 +0900
commit7a5c1c11c4034c121fd1c2b35c704678ca011a73 (patch)
treec096b19d57e94cba546f5b2ff8bf2863318ea6ec /gobmpd
parent81f33a9d72ced4c7a01a8fa0201f1188d53443b5 (diff)
add bmpd server
Currently, just accepts a conneciton and print received messages in the json format. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'gobmpd')
-rw-r--r--gobmpd/main.go66
1 files changed, 66 insertions, 0 deletions
diff --git a/gobmpd/main.go b/gobmpd/main.go
new file mode 100644
index 00000000..c6e68b04
--- /dev/null
+++ b/gobmpd/main.go
@@ -0,0 +1,66 @@
+// Copyright (C) 2015 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 main
+
+import (
+ "bufio"
+ "encoding/json"
+ "fmt"
+ log "github.com/Sirupsen/logrus"
+ "github.com/osrg/gobgp/packet"
+ "net"
+ "os"
+ "strconv"
+)
+
+func connLoop(conn *net.TCPConn) {
+ addr := conn.RemoteAddr()
+ scanner := bufio.NewScanner(bufio.NewReader(conn))
+ scanner.Split(bgp.SplitBMP)
+
+ for scanner.Scan() {
+ msg, err := bgp.ParseBMPMessage(scanner.Bytes())
+ if err != nil {
+ log.Info(err)
+ continue
+ }
+ j, _ := json.Marshal(msg)
+ fmt.Print(string(j), "\n")
+ }
+ log.Info("conn was closed ", addr)
+}
+
+func main() {
+ service := ":" + strconv.Itoa(bgp.BMP_DEFAULT_PORT)
+ addr, _ := net.ResolveTCPAddr("tcp", service)
+
+ l, err := net.ListenTCP("tcp", addr)
+ if err != nil {
+ log.Info(err)
+ os.Exit(1)
+ }
+
+ for {
+ conn, err := l.AcceptTCP()
+ if err != nil {
+ log.Info(err)
+ continue
+ }
+ log.Info("Accepted a new connection from ", conn.RemoteAddr())
+
+ go connLoop(conn)
+ }
+}