X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Fnetwork.git;a=blobdiff_plain;f=src%2Ffunctions%2Ffunctions.vlan;fp=src%2Ffunctions%2Ffunctions.vlan;h=fbaa34fe723df075ecbb20446fa39596812d9c86;hp=ee2fb3400062a62c49f35b49a73f5a4b563f3e1b;hb=2eb7011cb5447f9568c8136940f59a047e1b8dae;hpb=9532462fe04658d728ecbf263b586111f73fe2b2 diff --git a/src/functions/functions.vlan b/src/functions/functions.vlan index ee2fb340..fbaa34fe 100644 --- a/src/functions/functions.vlan +++ b/src/functions/functions.vlan @@ -22,6 +22,11 @@ PROC_NET_VLAN="/proc/net/vlan" PROC_NET_VLAN_CONFIG="${PROC_NET_VLAN}/config" +VLAN_SUPPORTED_PROTOCOLS=( + "802.1Q" # default + "802.1ad" +) + VLAN_PORT_INTERFIX="v" vlan_valid_id() { @@ -41,6 +46,13 @@ vlan_valid_id() { return ${EXIT_FALSE} } +vlan_supported_protocol() { + local proto="${1}" + assert isset proto + + list_match "${proto}" "${VLAN_SUPPORTED_PROTOCOLS[@]}" +} + vlan_create() { local device="${1}" shift @@ -50,6 +62,7 @@ vlan_create() { local address local id=1 local parent + local protocol="${VLAN_SUPPORTED_PROTOCOLS[0]}" # Parse command line arguments while [ $# -gt 0 ]; do @@ -63,6 +76,9 @@ vlan_create() { --parent=*) parent=$(cli_get_val "${1}") ;; + --protocol=*) + protocol=$(cli_get_val "${1}") + ;; *) error "Unrecognized argument: ${1}" return ${EXIT_ERROR} @@ -82,6 +98,12 @@ vlan_create() { return ${EXIT_ERROR} fi + # Check protocol + if ! vlan_supported_protocol "${protocol}"; then + log ERROR "Invalid protocol: ${protocol}" + return ${EXIT_ERROR} + fi + # Check VLAN ID if ! vlan_valid_id "${id}"; then log ERROR "Invalid VLAN ID: ${id}" @@ -103,7 +125,7 @@ vlan_create() { # Make the command local command=( ip link add link "${parent}" name "${device}" - address "${address}" type vlan id "${id}" + address "${address}" type vlan proto "${protocol}" id "${id}" ) # Run the command