Skip to content

Commit d5fd0fc

Browse files
committed
ovs: simplify hex parsing
1 parent f8f17c3 commit d5fd0fc

File tree

2 files changed

+12
-26
lines changed

2 files changed

+12
-26
lines changed

ovs/matchparser.go

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ package ovs
1616

1717
import (
1818
"bytes"
19-
"encoding/binary"
20-
"encoding/hex"
2119
"errors"
2220
"fmt"
2321
"math"
@@ -302,41 +300,25 @@ func parseTunID(value string) (Match, error) {
302300
}
303301
}
304302

305-
// pareHexUint16 parses a uint16 value from a hexadecimal string.
303+
// parseHexUint16 parses a uint16 value from a hexadecimal string.
306304
func parseHexUint16(value string) (uint16, error) {
307-
b, err := hex.DecodeString(strings.TrimPrefix(value, hexPrefix))
305+
val, err := strconv.ParseUint(strings.TrimPrefix(value, hexPrefix), 16, 32)
308306
if err != nil {
309307
return 0, err
310308
}
311-
if len(b) != 2 {
312-
return 0, errors.New("hexadecimal value must be two bytes in length")
313-
}
314-
315-
return binary.BigEndian.Uint16(b), nil
309+
return uint16(val), nil
316310
}
317311

318-
// pareHexUint32 parses a uint32 value from a hexadecimal string.
312+
// parseHexUint32 parses a uint32 value from a hexadecimal string.
319313
func parseHexUint32(value string) (uint32, error) {
320-
b, err := hex.DecodeString(strings.TrimPrefix(value, hexPrefix))
314+
val, err := strconv.ParseUint(strings.TrimPrefix(value, hexPrefix), 16, 32)
321315
if err != nil {
322316
return 0, err
323317
}
324-
if len(b) != 4 {
325-
return 0, errors.New("hexadecimal value must be four bytes in length")
326-
}
327-
328-
return binary.BigEndian.Uint32(b), nil
318+
return uint32(val), nil
329319
}
330320

331-
// pareHexUint64 parses a uint64 value from a hexadecimal string.
321+
// parseHexUint64 parses a uint64 value from a hexadecimal string.
332322
func parseHexUint64(value string) (uint64, error) {
333-
b, err := hex.DecodeString(strings.TrimPrefix(value, hexPrefix))
334-
if err != nil {
335-
return 0, err
336-
}
337-
if len(b) != 8 {
338-
return 0, errors.New("hexadecimal value must be eight bytes in length")
339-
}
340-
341-
return binary.BigEndian.Uint64(b), nil
323+
return strconv.ParseUint(strings.TrimPrefix(value, hexPrefix), 16, 64)
342324
}

ovs/matchparser_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,10 @@ func Test_parseMatch(t *testing.T) {
273273
final: "tun_id=0x1",
274274
m: TunnelID(1),
275275
},
276+
{
277+
s: "tun_id=0x135d",
278+
m: TunnelID(4957),
279+
},
276280
{
277281
s: "tun_id=0x000000000000000a",
278282
final: "tun_id=0xa",

0 commit comments

Comments
 (0)