]> git.ipfire.org Git - people/arne_f/network.git/blobdiff - hooks/zones/bridge.configs/ipv4-static
network: Improve IPV4 support.
[people/arne_f/network.git] / hooks / zones / bridge.configs / ipv4-static
index d897660b2cdcdfa5b9ed208537be8f9fd6efc1dd..5793321c9a9bb3fa5c3019359dda8c9a53209b2b 100755 (executable)
@@ -19,7 +19,7 @@
 #                                                                             #
 ###############################################################################
 
-. /lib/network/header-port
+. /lib/network/header-config
 
 HOOK_SETTINGS="HOOK ADDRESS PREFIX GATEWAY"
 
@@ -59,7 +59,8 @@ function _create() {
                PREFIX=$(ipv4_mask_to_cidr ${NETMASK})
        fi
 
-       config_write $(zone_dir ${zone})/config.${HOOK}.$(uuid) ${HOOK_SETTINGS}
+       # XXX maybe we can add some hashing to identify a configuration again
+       config_write $(zone_dir ${zone})/configs/${HOOK}.$(uuid) ${HOOK_SETTINGS}
 
        exit ${EXIT_OK}
 }
@@ -73,17 +74,30 @@ function _up() {
                error "Zone '${zone}' doesn't exist."
                exit ${EXIT_ERROR}
        fi
-       
-       config_read $(zone_dir ${zone})/${config}
+
+       config_read $(zone_dir ${zone})/configs/${config}
 
        if ! zone_has_ipv4 ${zone} ${ADDRESS}/${PREFIX}; then
+               if ipv4_detect_duplicate ${zone} ${ADDRESS}; then
+                       error_log "Duplicate address detected on zone '${zone}' (${address})."
+                       error_log "Cannot continue."
+                       exit ${EXIT_ERROR}
+               fi
+
                ip addr add ${ADDRESS}/${PREFIX} dev ${zone}
-       else
-               warning "Do not set IPv4 address '${ADDRESS}/${PREFIX}' because it was already configured on zone '${zone}'."
+
+               # Announce our new address to the neighbours
+               ipv4_update_neighbours ${zone} ${ADDRESS}
        fi
 
        if zone_is_nonlocal ${zone} && [ -n "${GATEWAY}" ]; then
-               : # XXX to be done
+               # Save configuration
+               red_db_set ${zone} type "${HOOK}"
+               red_db_set ${zone} local-ip-address ${ADDRESS}/${PREFIX}
+               red_db_set ${zone} remote-ip-address ${GATEWAY}
+               
+               red_db_set ${zone} active 1
+               red_routing_update ${zone}
        fi
 
        exit ${EXIT_OK}
@@ -99,7 +113,7 @@ function _down() {
                exit ${EXIT_ERROR}
        fi
        
-       config_read $(zone_dir ${zone})/${config}
+       config_read $(zone_dir ${zone})/configs/${config}
 
        if zone_has_ipv4 ${zone} ${ADDRESS}/${PREFIX}; then
                ip addr del ${ADDRESS}/${PREFIX} dev ${zone}
@@ -118,13 +132,13 @@ function _status() {
                exit ${EXIT_ERROR}
        fi
        
-       config_read $(zone_dir ${zone})/${config}
+       config_read $(zone_dir ${zone})/configs/${config}
 
        printf "        %10s - " "${HOOK}"
        if zone_has_ipv4 ${zone} ${ADDRESS}/${PREFIX}; then
-               echo -ne "${COLOUR_OK} OK  ${COLOUR_NORMAL}"
+               echo -ne "${COLOUR_ENABLED}ENABLED ${COLOUR_NORMAL}"
        else
-               echo -ne "${COLOUR_ERROR}ERROR${COLOUR_NORMAL}"
+               echo -ne "${COLOUR_DISABLED}DISABLED${COLOUR_NORMAL}"
        fi
        echo " - ${ADDRESS}/${PREFIX}"