]> git.ipfire.org Git - people/ms/network.git/blobdiff - src/hooks/ports/vlan
vlan: Fail when unknown command line parameters are being passed
[people/ms/network.git] / src / hooks / ports / vlan
index bc12a9e11a8eec5815c9684206c1cd0e9e53761a..39dbfffb9f3a762289f872a0183d8c443e2f3f9a 100644 (file)
 
 . /usr/lib/network/header-port
 
-HOOK_SETTINGS="ADDRESS PARENT_DEVICE TAG"
+HOOK_SETTINGS=(
+       "ADDRESS"
+       "PARENT_DEVICE"
+       "TAG"
+)
 
 PORT_PARENTS_VAR="PARENT"
 
@@ -47,7 +51,14 @@ hook_check_settings() {
        done
 }
 
-hook_new() {
+hook_find_port_name() {
+       assert isset PARENT_DEVICE
+       assert isset TAG
+
+       print "${PARENT_DEVICE}${VLAN_PORT_INTERFIX}${TAG}"
+}
+
+hook_parse_cmdline() {
        while [ $# -gt 0 ]; do
                case "${1}" in
                        --parent-device=*)
@@ -55,46 +66,28 @@ hook_new() {
                                ;;
                        --address=*)
                                ADDRESS=$(cli_get_val "${1}")
+
+                               # Validate address
+                               if ! mac_is_valid "${ADDRESS}"; then
+                                       error "Invalid MAC address given: ${ADDRESS}"
+                                       return ${EXIT_CONF_ERROR}
+                               fi
                                ;;
                        --tag=*)
                                TAG=$(cli_get_val "${1}")
                                ;;
-                       *)
-                               warning "Unknown argument '${1}'"
+                       -*)
+                               error "Unknown argument '${1}'"
+                               return ${EXIT_CONF_ERROR}
                                ;;
                esac
                shift
        done
 
-       local port="${PARENT_DEVICE}${VLAN_PORT_INTERFIX}${TAG}"
-
-       port_settings_write "${port}" ${HOOK_SETTINGS}
-
-       exit ${EXIT_OK}
-}
-
-hook_edit() {
-       local port=${1}
-       assert isset port
-       shift
-
-       port_settings_read "${port}" ${HOOK_SETTINGS}
-
-       while [ $# -gt 0 ]; do
-               case "${1}" in
-                       --address=*)
-                               ADDRESS=$(cli_get_val "${1}")
-                               ;;
-                       *)
-                               warning "Unknown argument '${1}'"
-                               ;;
-               esac
-               shift
-       done
-
-       port_settings_write "${port}" ${HOOK_SETTINGS}
-
-       exit ${EXIT_OK} 
+       # Generate a random MAC address if none given
+       if ! isset ADDRESS; then
+               ADDRESS="$(mac_generate)"
+       fi
 }
 
 hook_create() {
@@ -104,7 +97,7 @@ hook_create() {
        device_exists "${port}" && exit ${EXIT_OK}
 
        # Read configruation
-       port_settings_read "${port}" ${HOOK_SETTINGS}
+       port_settings_read "${port}"
 
        # Create the VLAN device
        vlan_create "${port}" "${PARENT_DEVICE}" "${TAG}" "${ADDRESS}"