X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Fnetwork.git;a=blobdiff_plain;f=src%2Fhooks%2Fports%2Fvlan;h=97b69851742ea56c8cc9574a197d4f21e83395c4;hp=69f5144cbcbdf5c33fb862d4ac3239af398fbfb3;hb=f24529e498b1c3fe60196c34356e5b005a22ae4c;hpb=96045e9c044a709407b40df4145011e335929a3e diff --git a/src/hooks/ports/vlan b/src/hooks/ports/vlan index 69f5144c..97b69851 100644 --- a/src/hooks/ports/vlan +++ b/src/hooks/ports/vlan @@ -23,56 +23,77 @@ HOOK_SETTINGS=( "ADDRESS" - "PARENT_DEVICE" - "TAG" + "ID" + "PARENT_PORT" ) -PORT_PARENTS_VAR="PARENT" +PORT_PARENTS_VAR="PARENT_PORT" hook_check_settings() { - assert isset PARENT_DEVICE - assert isinteger TAG + assert isset PARENT_PORT + assert isinteger ID if isset ADDRESS; then assert ismac ADDRESS fi - if [ ${TAG} -gt 4096 ]; then - error "TAG is greater than 4096." + if [ ${ID} -gt 4096 ]; then + error "ID is greater than 4096." exit ${EXIT_ERROR} fi local reserved for reserved in 0 4095; do - if [ "${TAG}" = "${reserved}" ]; then - error "TAG=${reserved} is reserved." + if [ "${ID}" = "${reserved}" ]; then + error "ID=${reserved} is reserved." exit ${EXIT_ERROR} fi done } hook_find_port_name() { - assert isset PARENT_DEVICE - assert isset TAG + assert isset ID + assert isset PARENT_PORT - print "${PARENT_DEVICE}${VLAN_PORT_INTERFIX}${TAG}" + print "${PARENT_PORT}${VLAN_PORT_INTERFIX}${ID}" } hook_parse_cmdline() { while [ $# -gt 0 ]; do case "${1}" in - --parent-device=*) - PARENT_DEVICE=$(cli_get_val "${1}") - ;; --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 + ;; + --id=*) + ID=$(cli_get_val "${1}") + ;; + --port=*) + PARENT_PORT=$(cli_get_val "${1}") + + # Check if PARENT_PORT exists + if ! port_exists "${PARENT_PORT}"; then + error "Port '${PARENT_PORT}' does not exist" + return ${EXIT_CONF_ERROR} + fi ;; - --tag=*) - TAG=$(cli_get_val "${1}") + *) + error "Unknown argument '${1}'" + return ${EXIT_CONF_ERROR} ;; esac shift done + + # Generate a random MAC address if none given + if ! isset ADDRESS; then + ADDRESS="$(mac_generate)" + fi } hook_create() { @@ -82,12 +103,32 @@ hook_create() { device_exists "${port}" && exit ${EXIT_OK} # Read configruation - port_settings_read "${port}" + if ! port_settings_read "${port}"; then + return ${EXIT_ERROR} + fi + + # Check if the parent port exists + if ! port_exists "${PARENT_PORT}"; then + error "Port '${PARENT_PORT}' does not exist" + return ${EXIT_ERROR} + fi + + # Create the partent port first + if ! port_create "${PARENT_PORT}"; then + error "Could not bring up parent port: ${PARENT_PORT}" + return ${EXIT_ERROR} + fi # Create the VLAN device - vlan_create "${port}" "${PARENT_DEVICE}" "${TAG}" "${ADDRESS}" + if ! vlan_create "${port}" \ + --address="${ADDRESS}" \ + --id="${id}" \ + --parent="${PARENT_PORT}"; then + error "Could not create port: ${port}" + return ${EXIT_ERROR} + fi - exit ${EXIT_OK} + return ${EXIT_OK} } hook_remove() {