#! /bin/sh -e

[ -n "$1" ]
ifname="$1"
brname="br$ifname"

# create bridge and enslave an interface to it
/sbin/brctl addbr "$brname"
/sbin/brctl addif "$brname" "$ifname"
/sbin/ip link s dev "$brname" up

# clone settings from interface to bridge
# /sbin/ifclone "$ifname" "$brname"

# Now we want to extract ip address, broadcast address from source interface
# and found a default route for that interface. Then we want to delete them
# from source interface and add them to target bridge.
# XXX: This can fail into infinite loop now, but I hope that it will not be
#      infinite in practice :)
# XXX: This code must be replaced by the call to ifclone above
# XXX: This code will fail if interface will have more than one ip address
inet_brd=$(ip a s "$ifname" | sed -n 's/\s\+inet \(.*\) scope.*$/\1/p')
if [ -n "$inet_brd" ]; then

    read addr brd baddr <<<"$inet_brd"
    [ "$brd" == "brd" ] || baddr=
    default_route=$(ip r | sed -n "s/^default via \(.*\) dev $ifname/\1/p" | tr -d ' ')

    ip addr del dev "$ifname" "$addr" $([ -z "$baddr" ] || echo "broadcast $baddr")

    ip addr add dev "$brname" "$addr" $([ -z "$baddr" ] || echo "broadcast $baddr")
    if [ -n "$default_route" ]; then
        rc=8
        while [ "$rc" = "8" ]; do
            ip r add default via "$default_route" dev "$brname" 2>/dev/null &&
                rc=0 || rc="$rc"
        done
    fi
fi
