1 // Copyright (c) 2018 Cisco and/or its affiliates.
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at:
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 // binapi-types is an example showing how to use and convert data with
16 // helper methods from *-types packages in VPP binary API.
24 "git.fd.io/govpp.git/binapi/ethernet_types"
25 "git.fd.io/govpp.git/binapi/ip"
26 "git.fd.io/govpp.git/binapi/ip_types"
27 "git.fd.io/govpp.git/binapi/vpe_types"
28 "git.fd.io/govpp.git/codec"
40 // convert IP address in string form into ip_types.Address
41 convertIPAddress("10.10.1.1")
42 convertIPAddress("ff80::1")
44 // convert IP address / CIDR in string form into ip_types.Prefix
45 convertIPPrefix("20.10.1.1/24")
46 convertIPPrefix("21.10.1.1")
47 convertIPPrefix("ff90::1/64")
48 convertIPPrefix("ff91::1")
50 // convert MAC address in string form into ethernet_types.MacAddress
51 convertToMacAddress("00:10:ab:4f:00:01")
53 // convert time.Time into vpe_types.Timestamp
54 convertToTimestamp(time.Now())
58 var union ip_types.AddressUnion
60 // initialize union using constructors
61 union = ip_types.AddressUnionIP4(ip_types.IP4Address{192, 168, 1, 10})
62 union = ip_types.AddressUnionIP6(ip_types.IP6Address{0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02})
64 // get union value using getters
68 // set union value using setters
74 // parse string into IP address
75 addr, err := ip_types.ParseAddress("192.168.1.10")
80 var msg = ip.IPPuntRedirect{
82 Punt: ip.PuntRedirect{
87 log.Printf("encoding message: %#v", msg)
89 var c = codec.DefaultCodec
91 b, err := c.EncodeMsg(&msg, 1)
96 // decode into this message
97 var msg2 ip.IPPuntRedirect
98 if err := c.DecodeMsg(b, &msg2); err != nil {
101 log.Printf("decoded message: %#v", msg2)
103 // compare the messages
104 if !msg.Punt.Nh.ToIP().Equal(msg2.Punt.Nh.ToIP()) {
105 log.Fatal("messages are not equal")
109 func convertIPAddress(ip string) {
110 addr, err := ip_types.ParseAddress(ip)
112 log.Printf("error converting IP to Address: %v", err)
115 fmt.Printf("converted IP %q to: %#v\n", ip, addr)
117 fmt.Printf("Address converted back to string IP %#v to: %s\n", addr, addr)
120 func convertIPPrefix(ip string) {
121 prefix, err := ip_types.ParsePrefix(ip)
123 log.Printf("error converting prefix to IP4Prefix: %v", err)
126 fmt.Printf("converted prefix %q to: %#v\n", ip, prefix)
128 fmt.Printf("IP4Prefix converted back to string prefix %#v to: %s\n", prefix, prefix)
131 func convertToMacAddress(mac string) {
132 parsedMac, err := ethernet_types.ParseMacAddress(mac)
134 log.Printf("error converting MAC to MacAddress: %v", err)
137 fmt.Printf("converted mac %q to: %#v\n", mac, parsedMac)
139 fmt.Printf("MacAddress converted back to string %#v to: %s\n", parsedMac, parsedMac)
142 func convertToTimestamp(t time.Time) {
143 timestamp := vpe_types.NewTimestamp(t)
144 fmt.Printf("converted time %v to: %#v\n", t, timestamp)
146 fmt.Printf("Timestamp converted back to string %#v to: %s\n", timestamp, timestamp)