]> git.ipfire.org Git - network.git/commitdiff
port: ip-tunnel: Allow to set MAC address
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 23 Sep 2018 22:28:40 +0000 (00:28 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 23 Sep 2018 22:28:40 +0000 (00:28 +0200)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/hooks/ports/ip-tunnel

index 73e803e298bf9d6215dd81724e2eb73c59daa2b0..3943e4cd3bea3f5aa3881e922d727411a9102bdc 100644 (file)
@@ -29,6 +29,9 @@ hook_check_settings() {
        assert isset MODE
        assert isoneof MODE ${SUPPORTED_IP_TUNNEL_MODES}
 
+       assert isset ADDRESS
+       assert mac_is_valid "${ADDRESS}"
+
        # Generate a random mark
        if ! isset MARK; then
                MARK="$(( ${RANDOM} & 0xffffffff ))"
@@ -38,6 +41,15 @@ hook_check_settings() {
 hook_parse_cmdline() {
        while [ $# -gt 0 ]; do
                case "${1}" in
+                       --address=*)
+                               ADDRESS="$(cli_get_val "${1}")"
+
+                               if ! isset ADDRESS || ! mac_is_valid "${ADDRESS}"; then
+                                       error "Invalid MAC address: ${ADDRESS}"
+                                       return ${EXIT_ERROR}
+                               fi
+                               ;;
+
                        --local-address=*)
                                LOCAL_ADDRESS="$(cli_get_val "${1}")"
                                ;;
@@ -64,6 +76,11 @@ hook_parse_cmdline() {
                shift
        done
 
+       # Generate a random MAC address if none is set
+       if ! isset ADDRESS; then
+               ADDRESS="$(mac_generate)"
+       fi
+
        # If PEER is set, it must be a valid IP address
        if isset PEER && ! ip_is_valid "${PEER}"; then
                error "Peer ${PEER} is not a valid IP address"