VLAN_PORT_INTERFIX="v"
-vlan_init() {
- ebtables-restore <<EOF
-*filter
-:INPUT ACCEPT
-:FORWARD ACCEPT
-:OUTPUT ACCEPT
-
-*broute
-:BROUTING ACCEPT
--A BROUTING -p 802_1Q -j DROP
-EOF
+vlan_valid_id() {
+ local id="${1}"
+
+ # Must be an integer
+ if ! isinteger id; then
+ return ${EXIT_FALSE}
+ fi
+
+ # Must be between 1 and 4095
+ if [ ${id} -ge 1 ] && [ ${id} -le 4096 ]; then
+ return ${EXIT_TRUE}
+ fi
+
+ # Otherwise this is invalid
+ return ${EXIT_FALSE}
}
vlan_create() {
assert isset device
local address
+ local id=1
local parent
- local tag
# Parse command line arguments
while [ $# -gt 0 ]; do
--address=*)
address=$(cli_get_val "${1}")
;;
+ --id=*)
+ id=$(cli_get_val "${1}")
+ ;;
--parent=*)
parent=$(cli_get_val "${1}")
;;
- --tag=*)
- tag=$(cli_get_val "${1}")
- ;;
*)
error "Unrecognized argument: ${1}"
return ${EXIT_ERROR}
return ${EXIT_ERROR}
fi
+ # Check VLAN ID
+ if ! vlan_valid_id "${id}"; then
+ log ERROR "Invalid VLAN ID: ${id}"
+ return ${EXIT_ERROR}
+ fi
+
# Check if a device with the name does already exist
if device_exists "${device}"; then
log ERROR "Device '${device}' already exists"
return ${EXIT_ERROR}
fi
- # Load ebtables stuff.
- vlan_init
-
# Make the command
local command=(
ip link add link "${parent}" name "${device}"
- address "${address}" type vlan id "${tag}"
+ address "${address}" type vlan id "${id}"
)
# Run the command
return ${EXIT_ERROR}
fi
- log DEBUG "Created VLAN device ${device} (parent = ${parent}, id = ${tag})"
+ log DEBUG "Created VLAN device ${device} (parent = ${parent}, id = ${id})"
return ${EXIT_OK}
}