package swModels import ( "regexp" "strings" "github.rackspace.com/gorax/tools/util" ) var ( IOSMACRE = regexp.MustCompile(`(?i)([0-9]+)\s+(\S+)\s+(static|dynamic)\s+(\S+)`) ) type ( MACAddressTable struct { MACAddress []*MACAddress `json:"mac_address_entries"` } MACAddress struct { Vlan int `json:"vlan"` MACEntries []*MACEntry `json:"mac_address_entries"` } MACEntry struct { MAC string `json:"mac_address"` Type string `json:"type"` Port string `json:"port"` } ) func (m *MACAddressTable) Parse(s *string) { mt := make(map[int][]*MACEntry) for _, l := range strings.Split(*s, "\n") { me := IOSMACRE.FindStringSubmatch(l) if len(me) == 0 { continue } vlan := util.Atoi(me[1]) if vlan == -9999 { continue } mt[vlan] = append(mt[vlan], &MACEntry{ MAC: me[2], Type: strings.ToLower(me[3]), Port: nomalizePortName(&me[4]), }) } for vlan, data := range mt { m.MACAddress = append(m.MACAddress, &MACAddress{ Vlan: vlan, MACEntries: data, }) } } func (m *MACAddress) FindMac(mac string) *MACEntry { for _, me := range m.MACEntries { if strings.ToLower(me.MAC) == mac { return me } } return nil }