From 08266e35878f198e2fa59fcfc9f0fc3a4b1dfbf5 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Thu, 10 Jan 2019 10:57:50 +0100 Subject: Add support for string types - strings are now generated as two fields for length and string itself - aliases are now sorted by name to prevent generating different code - dependencies are now managed by dep - binapi files are regenerated using VPP 19.01-rc0~622-g7b01e9e8 - old stats binary api has been deprecated and removed from VPP Change-Id: Ieb8515c73021339a45f407386f8e3d87dcf4469e Signed-off-by: Ondrej Fabry --- examples/cmd/stats-client/stats_client.go | 165 ------------------------------ 1 file changed, 165 deletions(-) delete mode 100644 examples/cmd/stats-client/stats_client.go (limited to 'examples/cmd') diff --git a/examples/cmd/stats-client/stats_client.go b/examples/cmd/stats-client/stats_client.go deleted file mode 100644 index 7a2c313..0000000 --- a/examples/cmd/stats-client/stats_client.go +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright (c) 2017 Cisco and/or its affiliates. -// -// 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. - -// Binary stats-client is an example VPP management application that exercises the -// govpp API for interface counters together with asynchronous connection to VPP. -package main - -import ( - "fmt" - "log" - "os" - "os/signal" - - "git.fd.io/govpp.git" - "git.fd.io/govpp.git/api" - "git.fd.io/govpp.git/core" - "git.fd.io/govpp.git/examples/bin_api/stats" -) - -/* - - IMPORTANT NOTICE! - - The binary API module stats used in this example will be deprecated in VPP 19.01. - VPP's new stats API should be used, you can find basic usage of new stats API in example stats-api. - -*/ - -func main() { - fmt.Println("Starting stats VPP client..") - - // async connect to VPP - conn, statCh, err := govpp.AsyncConnect("") - if err != nil { - log.Fatalln("Error:", err) - } - defer conn.Disconnect() - - // create an API channel that will be used in the examples - ch, err := conn.NewAPIChannel() - if err != nil { - log.Fatalln("Error:", err) - } - defer ch.Close() - - // create channel for Interrupt signal - sigChan := make(chan os.Signal, 1) - signal.Notify(sigChan, os.Interrupt) - - var notifChan chan api.Message - var simpleSub api.SubscriptionCtx - var combinedSub api.SubscriptionCtx - - // loop until Interrupt signal is received -loop: - for { - select { - case connEvent := <-statCh: - // VPP connection state change - switch connEvent.State { - case core.Connected: - fmt.Println("VPP connected.") - if notifChan == nil { - simpleSub, combinedSub, notifChan = subscribeNotifications(ch) - } - requestStatistics(ch) - - case core.Disconnected: - fmt.Println("VPP disconnected.") - } - - case msg := <-notifChan: - switch notif := msg.(type) { - case *stats.VnetInterfaceSimpleCounters: - // simple counter notification received - processSimpleCounters(notif) - case *stats.VnetInterfaceCombinedCounters: - // combined counter notification received - processCombinedCounters(notif) - default: - fmt.Println("Ignoring unknown VPP notification") - } - - case <-sigChan: - // interrupt received - fmt.Println("Interrupt received, exiting.") - break loop - } - } - - simpleSub.Unsubscribe() - combinedSub.Unsubscribe() -} - -// subscribeNotifications subscribes for interface counters notifications. -func subscribeNotifications(ch api.Channel) (api.SubscriptionCtx, api.SubscriptionCtx, chan api.Message) { - notifChan := make(chan api.Message, 100) - - simpleSub, err := ch.SubscribeNotification(notifChan, &stats.VnetInterfaceSimpleCounters{}) - if err != nil { - panic(err) - } - combinedSub, err := ch.SubscribeNotification(notifChan, &stats.VnetInterfaceCombinedCounters{}) - if err != nil { - panic(err) - } - - return simpleSub, combinedSub, notifChan -} - -// requestStatistics requests interface counters notifications from VPP. -func requestStatistics(ch api.Channel) { - if err := ch.SendRequest(&stats.WantStats{ - PID: uint32(os.Getpid()), - EnableDisable: 1, - }).ReceiveReply(&stats.WantStatsReply{}); err != nil { - panic(err) - } -} - -// processSimpleCounters processes simple counters received from VPP. -func processSimpleCounters(counters *stats.VnetInterfaceSimpleCounters) { - fmt.Printf("SimpleCounters: %+v\n", counters) - - counterNames := []string{ - "Drop", "Punt", - "IPv4", "IPv6", - "RxNoBuf", "RxMiss", - "RxError", "TxError", - "MPLS", - } - - for i := uint32(0); i < counters.Count; i++ { - fmt.Printf("Interface '%d': %s = %d\n", - counters.FirstSwIfIndex+i, counterNames[counters.VnetCounterType], counters.Data[i]) - } -} - -// processCombinedCounters processes combined counters received from VPP. -func processCombinedCounters(counters *stats.VnetInterfaceCombinedCounters) { - fmt.Printf("CombinedCounters: %+v\n", counters) - - counterNames := []string{"Rx", "Tx"} - - for i := uint32(0); i < counters.Count; i++ { - if len(counterNames) <= int(counters.VnetCounterType) { - continue - } - fmt.Printf("Interface '%d': %s packets = %d, %s bytes = %d\n", - counters.FirstSwIfIndex+i, - counterNames[counters.VnetCounterType], counters.Data[i].Packets, - counterNames[counters.VnetCounterType], counters.Data[i].Bytes) - } -} -- cgit 1.2.3-korg