summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gobgpd/main.go2
-rw-r--r--openswitch/openswitch.go42
2 files changed, 43 insertions, 1 deletions
diff --git a/gobgpd/main.go b/gobgpd/main.go
index 4fdd75d5..17bf68f3 100644
--- a/gobgpd/main.go
+++ b/gobgpd/main.go
@@ -161,7 +161,7 @@ func main() {
log.Errorf("Failed to start ops config manager: %s", err)
os.Exit(1)
}
- go m.Serve()
+ m.Serve()
} else if opts.ConfigFile != "" {
go config.ReadConfigfileServe(opts.ConfigFile, opts.ConfigType, configCh, reloadCh)
reloadCh <- true
diff --git a/openswitch/openswitch.go b/openswitch/openswitch.go
index 007b8178..4ed77f47 100644
--- a/openswitch/openswitch.go
+++ b/openswitch/openswitch.go
@@ -239,6 +239,12 @@ func (m *OpsManager) handleNeighborUpdate(update ovsdb.TableUpdate) []*server.Gr
}
func (m *OpsManager) Serve() error {
+ go m.OpsServe()
+ go m.GobgpServe()
+ return nil
+}
+
+func (m *OpsManager) OpsServe() error {
initial, err := m.client.MonitorAll("OpenSwitch", "")
if err != nil {
return err
@@ -297,6 +303,42 @@ func (m *OpsManager) Serve() error {
return nil
}
+func (m *OpsManager) GobgpServe() error {
+ family := bgp.RF_IPv4_UC
+ arg := &api.Arguments{
+ Resource: api.Resource_GLOBAL,
+ Family: uint32(family),
+ }
+
+ stream, err := client.MonitorBestChanged(context.Background(), arg)
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ for {
+ d, err := stream.Recv()
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ p, err := ApiStruct2Path(d.Paths[0])
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+
+ if globalOpts.Json {
+ j, _ := json.Marshal(p)
+ fmt.Println(string(j))
+ } else {
+ ShowRoute(p, false, false, false, true, false)
+ }
+ }
+ return nil
+}
+
func NewOpsManager(ch chan *server.GrpcRequest) (*OpsManager, error) {
cli, err := ovsdb.ConnectUnix("")
if err != nil {