Skip to content

Commit 3a787d9

Browse files
committed
Polish code
1. Add const to avoid hardcode. 2. Use Len() to avoid append. Signed-off-by: wgrayson <[email protected]>
1 parent 41e3a0e commit 3a787d9

File tree

1 file changed

+48
-36
lines changed

1 file changed

+48
-36
lines changed

openflow13/meter.go

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ const (
2424
OFPMF13_PKTPS = 0b0010 /* Rate value in packet/sec. */
2525
OFPMF13_BURST = 0b0100 /* Do burst size. */
2626
OFPMF13_STATS = 0b1000 /* Collect statistics. */
27+
28+
METER_BAND_HEADER_LEN = 12
29+
METER_BAND_LEN = 16
2730
)
2831

2932
type MeterBandHeader struct {
@@ -35,19 +38,16 @@ type MeterBandHeader struct {
3538

3639
func NewMeterBandHeader() *MeterBandHeader {
3740
return &MeterBandHeader{
38-
Type: OFPMBT13_DROP,
39-
Length: 16,
40-
Rate: 100,
41-
BurstSize: 200,
41+
Length: METER_BAND_LEN,
4242
}
4343
}
4444

4545
func (m *MeterBandHeader) Len() (n uint16) {
46-
return 12
46+
return METER_BAND_HEADER_LEN
4747
}
4848

4949
func (m *MeterBandHeader) MarshalBinary() (data []byte, err error) {
50-
data = make([]byte, 12)
50+
data = make([]byte, m.Len())
5151
n := 0
5252
binary.BigEndian.PutUint16(data[n:], m.Type)
5353
n += 2
@@ -79,16 +79,19 @@ type MeterBandDrop struct {
7979
}
8080

8181
func (m *MeterBandDrop) Len() (n uint16) {
82-
return m.MeterBandHeader.Len() + 4
82+
return METER_BAND_LEN
8383
}
8484

8585
func (m *MeterBandDrop) MarshalBinary() (data []byte, err error) {
86-
data, err = m.MeterBandHeader.MarshalBinary()
86+
data = make([]byte, m.Len())
87+
n := 0
88+
mbHdrBytes, err := m.MeterBandHeader.MarshalBinary()
8789
if err != nil {
8890
return nil, err
8991
}
90-
bytes := make([]byte, 4)
91-
return append(data, bytes...), nil
92+
copy(data, mbHdrBytes)
93+
n += METER_BAND_HEADER_LEN
94+
return
9295
}
9396

9497
func (m *MeterBandDrop) UnmarshalBinary(data []byte) error {
@@ -106,17 +109,20 @@ type MeterBandDSCP struct {
106109
}
107110

108111
func (m *MeterBandDSCP) Len() (n uint16) {
109-
return m.MeterBandHeader.Len() + 4
112+
return METER_BAND_LEN
110113
}
111114

112115
func (m *MeterBandDSCP) MarshalBinary() (data []byte, err error) {
113-
data, err = m.MeterBandHeader.MarshalBinary()
116+
data = make([]byte, m.Len())
117+
n := 0
118+
mbHdrBytes, err := m.MeterBandHeader.MarshalBinary()
114119
if err != nil {
115120
return nil, err
116121
}
117-
bytes := make([]byte, 4)
118-
bytes[0] = m.PrecLevel
119-
return append(data, bytes...), nil
122+
copy(data, mbHdrBytes)
123+
n += METER_BAND_HEADER_LEN
124+
data[n] = m.PrecLevel
125+
return
120126
}
121127

122128
func (m *MeterBandDSCP) UnmarshalBinary(data []byte) error {
@@ -129,22 +135,25 @@ func (m *MeterBandDSCP) UnmarshalBinary(data []byte) error {
129135
}
130136

131137
type MeterBandExperimenter struct {
132-
MeterBandHeader
133-
Experimenter uint32 /* Experimenter ID which takes the same form as in struct ofp_experimenter_header. */
138+
MeterBandHeader /* Type: OFPMBT13_EXPERIMENTER. */
139+
Experimenter uint32 /* Experimenter ID which takes the same form as in struct ofp_experimenter_header. */
134140
}
135141

136142
func (m *MeterBandExperimenter) Len() (n uint16) {
137-
return m.MeterBandHeader.Len() + 4
143+
return METER_BAND_LEN
138144
}
139145

140146
func (m *MeterBandExperimenter) MarshalBinary() (data []byte, err error) {
141-
data, err = m.MeterBandHeader.MarshalBinary()
147+
data = make([]byte, m.Len())
148+
n := 0
149+
mbHdrBytes, err := m.MeterBandHeader.MarshalBinary()
142150
if err != nil {
143151
return nil, err
144152
}
145-
bytes := make([]byte, 4)
146-
binary.BigEndian.PutUint32(bytes, m.Experimenter)
147-
return append(data, bytes...), nil
153+
copy(data, mbHdrBytes)
154+
n += METER_BAND_HEADER_LEN
155+
binary.BigEndian.PutUint32(data[n:], m.Experimenter)
156+
return
148157
}
149158

150159
func (m *MeterBandExperimenter) UnmarshalBinary(data []byte) error {
@@ -170,10 +179,6 @@ func NewMeterMod() *MeterMod {
170179
m := new(MeterMod)
171180
m.Header = NewOfp13Header()
172181
m.Header.Type = Type_MeterMod
173-
174-
m.Command = OFPMC_ADD
175-
m.Flags = OFPMF13_PKTPS
176-
m.MeterId = 1
177182
m.MeterBands = make([]util.Message, 0)
178183
return m
179184
}
@@ -199,22 +204,29 @@ func (m *MeterMod) Len() (n uint16) {
199204

200205
func (m *MeterMod) MarshalBinary() (data []byte, err error) {
201206
m.Header.Length = m.Len()
202-
data, err = m.Header.MarshalBinary()
203-
204-
bytes := make([]byte, 8)
207+
data = make([]byte, m.Len())
205208
n := 0
206-
binary.BigEndian.PutUint16(bytes[n:], m.Command)
209+
hdrBytes, err := m.Header.MarshalBinary()
210+
if err != nil {
211+
return nil, err
212+
}
213+
copy(data, hdrBytes)
214+
n += int(m.Header.Len())
215+
binary.BigEndian.PutUint16(data[n:], m.Command)
207216
n += 2
208-
binary.BigEndian.PutUint16(bytes[n:], m.Flags)
217+
binary.BigEndian.PutUint16(data[n:], m.Flags)
209218
n += 2
210-
binary.BigEndian.PutUint32(bytes[n:], m.MeterId)
219+
binary.BigEndian.PutUint32(data[n:], m.MeterId)
211220
n += 4
212-
data = append(data, bytes...)
213221

214222
for _, mb := range m.MeterBands {
215-
bytes, err = mb.MarshalBinary()
216-
data = append(data, bytes...)
217-
log.Debugf("Metermod band: %v", bytes)
223+
mbBytes, err := mb.MarshalBinary()
224+
if err != nil {
225+
return nil, err
226+
}
227+
copy(data[n:], mbBytes)
228+
n += METER_BAND_LEN
229+
log.Debugf("Metermod band: %v", mbBytes)
218230
}
219231

220232
log.Debugf("Metermod(%d): %v", len(data), data)

0 commit comments

Comments
 (0)