#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Copyright (C) 2015-2016 NIWA Hideyuki

import sys
import IPy
from optparse import OptionParser

# check args
parser = OptionParser()
parser.add_option("-n", "--number", action="store_true", default=False,
                  dest="ipnum", help="exchange number")
parser.add_option("-b", "--broadcast", action="store_true", default=False,
                  dest="ipbroadcast", help="ip broadcast")
parser.add_option("-m", "--mask", action="store_true", default=False,
                  dest="ipmask", help="ip mask")
parser.add_option("-g", "--gateway", action="store_true", default=False,
                  dest="ipgw", help="ip gateway")
(options, args) = parser.parse_args(sys.argv)

if len(args) != 2:
    print("usage: net-ipv4 [ -n ] [ -b ] [ -m ] [ -g ] IP-ADDR/MASK")
    sys.exit(1)

# get args
ipstr = args[1]
ipary = ipstr.split("/")
try:
    ip = IPy.IP(ipary[0])
    mask = int(ipary[1])
except:
    print("error: illegal format(xxx.xxx.xxx.xxx/nn) "+ipstr)
    sys.exit(1)

if (mask < 0) or (mask >32):
    print("error: illegal mask "+mask)
    sys.exit(1)

# make bit masks
bnetmask = 0xffffffff
for i in range(32-mask):
    bnetmask = bnetmask << 1

netmask = (bnetmask ^ 0xffffffff) & 0xffffffff

# option -n
if options.ipnum:
    print ip.int()

# option -b
if options.ipbroadcast:
    print IPy.IP((ip.int() | netmask) &  0xffffffff)

# option -m
if options.ipmask:
    print IPy.IP((ip.int() & bnetmask) &  0xffffffff)

# option -g
if options.ipgw:
    print IPy.IP((ip.int() & bnetmask | 1) &  0xffffffff)

sys.exit(0)
