. /usr/lib/network/header-port
-HOOK_SETTINGS="ADDRESS PARENT_DEVICE TAG"
+HOOK_SETTINGS=(
+ "ADDRESS"
+ "PARENT_DEVICE"
+ "TAG"
+)
PORT_PARENTS_VAR="PARENT"
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=*)
;;
--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() {
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}"