#!/usr/local/bin/tclsh8.6

#
# Format a vlan list for topo programs
#
# Syntaxe :
#	list-vlans [ <id> ]
#
# History :
#   2004/07/09 : pda/jean      : design
#   2007/01/08 : pda           : change output format
#   2010/09/14 : jean/saillard : change input format, no more VTP
#   2010/09/21 : pda/jean      : add third optional column "voip"
#   2010/11/17 : pda           : use netmagis database
#   2010/12/18 : pda           : rework installation
#

source /usr/local/lib/netmagis/libnetmagis.tcl

##############################################################################
# Programme principal
##############################################################################

proc usage {argv0} {
    puts stderr "usage: $argv0 \[ vlanid \]"
}


proc main {argv0 argv} {
    global conf

    #
    # Initialize
    #

    set msg [d init-script dbfd $argv0 true tabcor]
    if {$msg ne ""} then {
	puts stderr "$msg"
	puts stderr "Aborted."
	return 1
    }

    #
    # Argument checking
    #

    switch [llength $argv] {
	0 {
	    set where ""
	}
	1 {
	    set id [lindex $argv 0]
	    if {! [regexp {^[0-9]+$} $id] || $id < 1 || $id > 4095} then {
		usage $argv0
		return 1
	    }
	    set where "WHERE vlanid = $id"
	}
	default {
	    usage $argv0
	    return 1
	}
    }

    #
    # Search vlan(s)
    #

    set sql "SELECT * FROM topo.vlan $where ORDER BY vlanid ASC"
    set found 0
    set err 0
    pg_select $dbfd $sql tab {
	set found 1

	set desc $tab(descr)
	set vlanid $tab(vlanid)
	set voip $tab(voip)

	if {! [check-vlan-name $desc msg]} then {
	    puts stderr "$argv0: invalid characters in vlan $vlanid ($msg)"
	    set err 1
	}
	binary scan $desc H* desc

	puts stdout "vlan $vlanid desc $desc voice $voip"
    }

    if {! $found} then {
	puts stderr "$argv0: no vlan found"
	set err 1
    }

    #
    # Close database and exit
    #

    d end
    return $err
}

exit [main $argv0 $argv]
