56 lines
1 KiB
Go
56 lines
1 KiB
Go
|
//go:build linux
|
||
|
|
||
|
package dpdk
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type linkStatus int64
|
||
|
|
||
|
const (
|
||
|
down linkStatus = iota
|
||
|
up
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
ethdevLinkStatusCommand = "/ethdev/link_status"
|
||
|
linkStatusStringFieldName = "status"
|
||
|
linkStatusIntegerFieldName = "link_status"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
linkStatusMap = map[string]linkStatus{
|
||
|
"down": down,
|
||
|
"up": up,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func processCommandResponse(command string, data map[string]interface{}) error {
|
||
|
if command == ethdevLinkStatusCommand {
|
||
|
return processLinkStatusCmd(data)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func processLinkStatusCmd(data map[string]interface{}) error {
|
||
|
status, ok := data[linkStatusStringFieldName].(string)
|
||
|
if !ok {
|
||
|
return fmt.Errorf("can't find or parse %q field", linkStatusStringFieldName)
|
||
|
}
|
||
|
|
||
|
parsedLinkStatus, ok := parseLinkStatus(status)
|
||
|
if !ok {
|
||
|
return fmt.Errorf("can't parse linkStatus: unknown value: %q", status)
|
||
|
}
|
||
|
|
||
|
data[linkStatusIntegerFieldName] = int64(parsedLinkStatus)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func parseLinkStatus(s string) (linkStatus, bool) {
|
||
|
value, ok := linkStatusMap[strings.ToLower(s)]
|
||
|
return value, ok
|
||
|
}
|