package pkg import ( "regexp" "github.rackspace.com/gorax/tools/util" ) var ( LISTNETALLRE = regexp.MustCompile(`net\s+interface\s+(\d\.\d{1,2}|mgmt)\s+(.|\n)*?\n}`) IFINDXRE = regexp.MustCompile(`if-index\s+([0-9]+)`) MACADDRE = regexp.MustCompile(`mac-address\s+(\S+)`) MEDIAMAXRE = regexp.MustCompile(`media-max\s+(\S+)`) MEDIAACTRE = regexp.MustCompile(`media-max\s+(\S+)`) MTURE = regexp.MustCompile(`mtu\s+([0-9]+)`) ) type ( IntHwConfig struct { Name string `json:"name"` IfIndex int `json:"if-index"` Mac string `json:"mac-address"` MediaActive string `json:"media-active"` MediaMax string `json:"media-max"` Mtu *int `json:"mtu"` } ) func ParseInterfaces(s string) ([]*IntHwConfig, error) { var i []*IntHwConfig for _, v := range LISTNETALLRE.FindAllStringSubmatch(s, -1) { i = append(i, &IntHwConfig{ Name: v[1], IfIndex: util.Atoi(util.RegexpString(IFINDXRE, v[0])), Mac: util.RegexpString(MACADDRE, v[0]), MediaMax: util.RegexpString(MEDIAMAXRE, v[0]), MediaActive: util.RegexpString(MEDIAACTRE, v[0]), Mtu: util.AtoiPointer(util.RegexpString(MTURE, v[0])), }) } return i, nil } func FindInterfaceConfig(name string, il []*IntHwConfig) *IntHwConfig { for _, i := range il { if name == i.Name { return i } } return nil }