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  }