#!/bin/sh ### BEGIN INIT INFO # Provides: brintos-network # Required-Start: # Required-Stop: # Default-Start: S # Default-Stop: # Short-Description: Static address and default route on the virtio-net interface ### END INIT INFO PATH=/sbin:/usr/sbin:/bin:/usr/bin IFACE=eth0 ADDRESS=10.0.2.15/24 GATEWAY=10.0.2.2 [ -r /etc/default/brintos-network ] && . /etc/default/brintos-network # BRINTOS-WORKAROUND: brintos/linux#16 revisit -- drives ip directly because ifup failed to take its ifstate lock while advisory locks returned EINVAL present() { ip link show "$IFACE" >/dev/null 2>&1 } has_address() { ip -4 addr show dev "$IFACE" 2>/dev/null | grep -qF "inet $ADDRESS " } has_default() { ip route show 2>/dev/null | grep -q '^default ' } # ip's netlink adds are exclusive, so each is guarded on the current state: a # configured link would otherwise print "File exists" on every boot. The adds # keep their stderr; only the probes are quiet. start() { if ! present; then echo "brintos-network: no $IFACE (no virtio-net device) -- network not configured" return 0 fi ip link set "$IFACE" up || return 1 has_address || ip addr add "$ADDRESS" dev "$IFACE" || return 1 has_default || ip route add default via "$GATEWAY" dev "$IFACE" || return 1 echo "brintos-network: $IFACE up, $ADDRESS via $GATEWAY" } stop() { present || return 0 ip route show 2>/dev/null | grep -q "^default via $GATEWAY " && ip route del default via "$GATEWAY" has_address && ip addr del "$ADDRESS" dev "$IFACE" ip link set "$IFACE" down } status() { if ! present; then echo "brintos-network: no $IFACE" return 3 fi ip addr show dev "$IFACE" ip route show has_address && has_default || return 3 } case "$1" in start|stop|status) "$1" ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart|status}" >&2 exit 2 ;; esac