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 // union-example is an example to show how to use unions in VPP binary API.
23 "git.fd.io/govpp.git/binapi/ethernet_types"
24 "git.fd.io/govpp.git/binapi/ip"
25 "git.fd.io/govpp.git/binapi/ip_types"
26 "git.fd.io/govpp.git/binapi/vpe_types"
27 "git.fd.io/govpp.git/codec"
39 // convert IP address in string form into ip_types.Address
40 convertIPAddress("10.10.1.1")
41 convertIPAddress("ff80::1")
43 // convert IP address / CIDR in string form into ip_types.Prefix
44 convertIPPrefix("20.10.1.1/24")
45 convertIPPrefix("21.10.1.1")
46 convertIPPrefix("ff90::1/64")
47 convertIPPrefix("ff91::1")
49 // convert MAC address in string form into ethernet_types.MacAddress
50 convertToMacAddress("00:10:ab:4f:00:01")
52 // convert time.Time into vpe_types.Timestamp
53 convertToTimestamp(time.Now())
57 var union ip_types.AddressUnion
59 // initialize union using constructors
60 union = ip_types.AddressUnionIP4(ip_types.IP4Address{192, 168, 1, 10})
61 union = ip_types.AddressUnionIP6(ip_types.IP6Address{0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02})
63 // get union value using getters
67 // set union value using setters
73 // parse string into IP address
74 addr, err := ip_types.ParseAddress("192.168.1.10")
79 var msg = ip.IPPuntRedirect{
81 Punt: ip.PuntRedirect{
86 log.Printf("encoding message: %#v", msg)
88 var c = codec.DefaultCodec
90 b, err := c.EncodeMsg(&msg, 1)
95 // decode into this message
96 var msg2 ip.IPPuntRedirect
97 if err := c.DecodeMsg(b, &msg2); err != nil {
100 log.Printf("decoded message: %#v", msg2)
102 // compare the messages
103 if !msg.Punt.Nh.ToIP().Equal(msg2.Punt.Nh.ToIP()) {
104 log.Fatal("messages are not equal")
108 func convertIPAddress(ip string) {
109 addr, err := ip_types.ParseAddress(ip)
111 log.Printf("error converting IP to Address: %v", err)
114 fmt.Printf("converted IP %q to: %#v\n", ip, addr)
116 fmt.Printf("Address converted back to string IP %#v to: %s\n", addr, addr)
119 func convertIPPrefix(ip string) {
120 prefix, err := ip_types.ParsePrefix(ip)
122 log.Printf("error converting prefix to IP4Prefix: %v", err)
125 fmt.Printf("converted prefix %q to: %#v\n", ip, prefix)
127 fmt.Printf("IP4Prefix converted back to string prefix %#v to: %s\n", prefix, prefix)
130 func convertToMacAddress(mac string) {
131 parsedMac, err := ethernet_types.ParseMacAddress(mac)
133 log.Printf("error converting MAC to MacAddress: %v", err)
136 fmt.Printf("converted mac %q to: %#v\n", mac, parsedMac)
138 fmt.Printf("MacAddress converted back to string %#v to: %s\n", parsedMac, parsedMac)
141 func convertToTimestamp(t time.Time) {
142 timestamp := vpe_types.NewTimestamp(t)
143 fmt.Printf("converted time %v to: %#v\n", t, timestamp)
145 fmt.Printf("Timestamp converted back to string %#v to: %s\n", timestamp, timestamp)