blob: f6f2e7ecc033e36d7115c718f3b28f9e95fbf235 [file] [log] [blame]
Don Newton98fd8812019-09-23 15:15:02 -04001package of13
2
3import (
4 "encoding/json"
5 "fmt"
6 "net"
7
8 "github.com/skydive-project/goloxi"
9)
10
11// TODO: set real types
12type OXM = Oxm
13type uint128 = goloxi.Uint128
14type Checksum128 [16]byte
15type Bitmap128 uint128
16type Bitmap512 struct {
17 a, b, c, d uint128
18}
19type Unimplemented struct{}
20type BSNVport uint16
21type ControllerURI uint16
22
23func (h *Header) MessageType() uint8 {
24 return h.Type
25}
26
27func (h *Header) MessageName() string {
28 return Type(h.Type).String()
29}
30
31func (self *Checksum128) Decode(decoder *goloxi.Decoder) error {
32 return nil
33}
34
35func (self *Checksum128) Serialize(encoder *goloxi.Encoder) error {
36 return nil
37}
38func (self *Bitmap128) Decode(decoder *goloxi.Decoder) error {
39 return nil
40}
41
42func (self *Bitmap128) Serialize(encoder *goloxi.Encoder) error {
43 return nil
44}
45func (self *Bitmap512) Decode(decoder *goloxi.Decoder) error {
46 return nil
47}
48
49func (self *Bitmap512) Serialize(encoder *goloxi.Encoder) error {
50 return nil
51}
52func (self *BSNVport) Decode(decoder *goloxi.Decoder) error {
53 return nil
54}
55
56func (self *BSNVport) Serialize(encoder *goloxi.Encoder) error {
57 return nil
58}
59func (self *ControllerURI) Decode(decoder *goloxi.Decoder) error {
60 return nil
61}
62
63func (self *ControllerURI) Serialize(encoder *goloxi.Encoder) error {
64 return nil
65}
66
67type FmCmd uint8
68
69func (self *FmCmd) Serialize(encoder *goloxi.Encoder) error {
70 encoder.PutUint8(uint8(*self))
71 return nil
72}
73
74func (self *FmCmd) Decode(decoder *goloxi.Decoder) error {
75 *self = FmCmd(decoder.ReadUint8())
76 return nil
77}
78
79type MatchBmap uint64
80
81func (self *MatchBmap) Serialize(encoder *goloxi.Encoder) error {
82 encoder.PutUint64(uint64(*self))
83 return nil
84}
85
86func (self *MatchBmap) Decode(decoder *goloxi.Decoder) error {
87 *self = MatchBmap(decoder.ReadUint64())
88 return nil
89}
90
91type WcBmap uint64
92
93func (self *WcBmap) Serialize(encoder *goloxi.Encoder) error {
94 encoder.PutUint64(uint64(*self))
95 return nil
96}
97
98func (self *WcBmap) Decode(decoder *goloxi.Decoder) error {
99 *self = WcBmap(decoder.ReadUint64())
100 return nil
101}
102
103type Match = MatchV3
104type PortNo uint32
105
106func (self *PortNo) Serialize(encoder *goloxi.Encoder) error {
107 encoder.PutUint32(uint32(*self))
108 return nil
109}
110
111func (self *PortNo) Decode(decoder *goloxi.Decoder) error {
112 *self = PortNo(decoder.ReadUint32())
113 return nil
114}
115
116func DecodeMessage(data []byte) (goloxi.Message, error) {
117 header, err := DecodeHeader(goloxi.NewDecoder(data))
118 if err != nil {
119 return nil, err
120 }
121
122 return header.(goloxi.Message), nil
123}
124
125func (self *Port) Serialize(encoder *goloxi.Encoder) error {
126 portNo := PortNo(*self)
127 return portNo.Serialize(encoder)
128}
129
130func (self *Port) Decode(decoder *goloxi.Decoder) error {
131 portNo := PortNo(*self)
132 if err := portNo.Decode(decoder); err != nil {
133 return err
134 }
135 *self = Port(portNo)
136 return nil
137}
138
139func jsonValue(value interface{}) ([]byte, error) {
140 switch t := value.(type) {
141 case net.HardwareAddr:
142 value = t.String()
143 case net.IP:
144 value = t.String()
145 default:
146 if s, ok := t.(fmt.Stringer); ok {
147 value = s.String()
148 } else {
149 value = t
150 }
151 }
152
153 return json.Marshal(value)
154}