github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-portoverrides/main.go (about) 1 // Copyright (c) 2014 Dimitri Sokolyuk. All rights reserved. 2 // Use of this source code is governed by ISC-style license 3 // that can be found in the LICENSE file. 4 5 // Example command list port-overrides 6 // list port-overrides of a given device 7 package main 8 9 import ( 10 "flag" 11 "fmt" 12 "log" 13 "os" 14 "strconv" 15 "text/tabwriter" 16 17 "github.com/dim13/unifi" 18 ) 19 20 var ( 21 host = flag.String("host", "unifi", "Controller hostname") 22 user = flag.String("user", "admin", "Controller username") 23 pass = flag.String("pass", "unifi", "Controller password") 24 port = flag.String("port", "8443", "Controller port") 25 version = flag.Int("version", 5, "Controller base version") 26 siteid = flag.String("siteid", "default", "Sitename or description") 27 28 devicename = flag.String("devicename", "", "Name of the device") 29 ) 30 31 func main() { 32 w := new(tabwriter.Writer) 33 w.Init(os.Stdout, 0, 8, 3, ' ', 0) 34 defer w.Flush() 35 36 flag.Parse() 37 38 u, err := unifi.Login(*user, *pass, *host, *port, *siteid, *version) 39 if err != nil { 40 log.Fatalln("Login returned error: ", err) 41 } 42 defer u.Logout() 43 44 site, err := u.Site(*siteid) 45 if err != nil { 46 log.Fatal(err) 47 } 48 49 // Returns a slice of devices 50 usw, err := u.USW(site, *devicename) 51 52 if err != nil { 53 log.Fatalln(err) 54 } 55 56 pm, err := u.PortProfileMap(site) 57 58 if err != nil { 59 log.Fatalln(err) 60 } 61 62 overrides := usw.PortOverrides 63 64 // Output headline 65 fmt.Fprintln(w, "PortIndex\tName\tPortprofileName\tPoeMode\tOpMode\tAutoneg\tSpeed\tFullDuplex\tIsolation\tLLDPmedEnabled") 66 67 for _, o := range overrides { 68 portindex := o.PortIdx // int 69 name := o.Name // string 70 profileID := o.PortconfID // string 71 poemode := o.POEMode // string 72 opmode := o.OpMode // string 73 pautoneg := o.Autoneg // bool 74 pspeed := o.Speed // int 75 pfullduplex := o.FullDuplex // bool 76 pisolation := o.Isolation // bool 77 lldpmedEnabled := o.LLDPMedEnabled // bool 78 79 // Get port profile name 80 profilename := pm[profileID].Name 81 82 // Handle nil pointer in case of absent field 83 fullduplex := "" 84 if pfullduplex != nil { 85 fullduplex = strconv.FormatBool(*pfullduplex) 86 } 87 88 // Handle nil pointer in case of absent field 89 speed := "" 90 if pspeed != nil { 91 speed = strconv.FormatInt(int64(*pspeed), 10) 92 } 93 94 // Handle nil pointer in case of absent field 95 autoneg := "" 96 if pautoneg != nil { 97 autoneg = strconv.FormatBool(*pautoneg) 98 } 99 100 // Handle nil pointer in case of absent field 101 isolation := "" 102 if pisolation != nil { 103 isolation = strconv.FormatBool(*pisolation) 104 } 105 106 // Handle nil pointer in case of absent field 107 lldpmed := "" 108 if lldpmedEnabled != nil { 109 lldpmed = strconv.FormatBool(*lldpmedEnabled) 110 } 111 112 fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", portindex, name, profilename, poemode, opmode, autoneg, speed, fullduplex, isolation, lldpmed) 113 } 114 }