diff --git a/thalerj/openbmctool.py b/thalerj/openbmctool.py
index 9a09ddd..88c7d3a 100755
--- a/thalerj/openbmctool.py
+++ b/thalerj/openbmctool.py
@@ -2709,6 +2709,113 @@
     return res.text
 
 
+def addIP(host, args, session):
+    """
+        Called by the network function. Configures IP address on given interface
+
+        @param host: string, the hostname or IP address of the bmc
+        @param args: contains additional arguments used by the ldap subcommand
+                args.json: boolean, if this flag is set to true, the output
+                will be provided in json format for programmatic consumption
+        @param session: the active session to use
+    """
+
+    url = "https://" + host + "/xyz/openbmc_project/network/" + args.Interface\
+        + "/action/IP"
+    httpHeader = {'Content-Type': 'application/json'}
+    protocol = {
+             'ipv4': 'xyz.openbmc_project.Network.IP.Protocol.IPv4',
+             'ipv6': 'xyz.openbmc_project.Network.IP.Protocol.IPv6'
+            }
+
+    data = {"data": [protocol[args.type], args.address, int(args.prefixLength),
+        args.gateway]}
+
+    try:
+        res = session.post(url, headers=httpHeader, json=data, verify=False,
+                           timeout=30)
+    except(requests.exceptions.Timeout):
+        return(connectionErrHandler(args.json, "Timeout", None))
+    except(requests.exceptions.ConnectionError) as err:
+        return connectionErrHandler(args.json, "ConnectionError", err)
+    if res.status_code == 404:
+        return "The specified Interface" + "(" + args.Interface + ")" +\
+            " doesn't exist"
+
+    return res.text
+
+
+def getIP(host, args, session):
+    """
+        Called by the network function. Prints out IP address of given interface
+
+        @param host: string, the hostname or IP address of the bmc
+        @param args: contains additional arguments used by the ldap subcommand
+                args.json: boolean, if this flag is set to true, the output
+                will be provided in json format for programmatic consumption
+        @param session: the active session to use
+    """
+
+    url = "https://" + host+"/xyz/openbmc_project/network/" + args.Interface +\
+        "/enumerate"
+    httpHeader = {'Content-Type': 'application/json'}
+    try:
+        res = session.get(url, headers=httpHeader, verify=False, timeout=40)
+    except(requests.exceptions.Timeout):
+        return(connectionErrHandler(args.json, "Timeout", None))
+    except(requests.exceptions.ConnectionError) as err:
+        return connectionErrHandler(args.json, "ConnectionError", err)
+    if res.status_code == 404:
+        return "The specified Interface" + "(" + args.Interface + ")" +\
+            " doesn't exist"
+
+    return res.text
+
+
+def deleteIP(host, args, session):
+    """
+        Called by the network function. Deletes the IP address from given Interface
+
+        @param host: string, the hostname or IP address of the bmc
+        @param args: contains additional arguments used by the ldap subcommand
+        @param session: the active session to use
+        @param args.json: boolean, if this flag is set to true, the output
+            will be provided in json format for programmatic consumption
+    """
+
+    url = "https://"+host+"/xyz/openbmc_project/network/" + args.Interface+\
+        "/enumerate"
+    httpHeader = {'Content-Type':'application/json'}
+    data = {"data": []}
+    try:
+        res = session.get(url, headers=httpHeader, verify=False, timeout=40)
+    except(requests.exceptions.Timeout):
+        return(connectionErrHandler(args.json, "Timeout", None))
+    except(requests.exceptions.ConnectionError) as err:
+        return connectionErrHandler(args.json, "ConnectionError", err)
+    if res.status_code == 404:
+        return "The specified Interface" + "(" + args.Interface + ")" +\
+            " doesn't exist"
+    objDict = json.loads(res.text)
+    if not objDict['data']:
+        return "No object found for given address on given Interface"
+
+    for obj in objDict['data']:
+        if args.address in objDict['data'][obj]['Address']:
+            url = "https://"+host+obj+"/action/delete"
+            try:
+                res = session.post(url, headers=httpHeader, json=data,
+                                   verify=False, timeout=30)
+            except(requests.exceptions.Timeout):
+                return(connectionErrHandler(args.json, "Timeout", None))
+            except(requests.exceptions.ConnectionError) as err:
+                return connectionErrHandler(args.json, "ConnectionError", err)
+            return res.text
+        else:
+            continue
+    return "No object found for given address on given Interface"
+
+
 def createPrivilegeMapping(host, args, session):
     """
          Called by the ldap function. Creates the group and the privilege mapping.
@@ -3183,10 +3290,10 @@
                                            help="enables the DHCP on given "
                                            "Interface")
     parser_enable_dhcp.add_argument("-I", "--Interface", required=True,
-                                    choices=['eth0', 'eth1'],
-                                    help="Name of the ethernet interface"
-                                    "(it can be obtained by the command:"
-                                    "network view-config)")
+                                    help="Name of the ethernet interface(it can"
+                                    "be obtained by the "
+                                    "command:network view-config)"
+                                    "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_enable_dhcp.set_defaults(func=enableDHCP)
 
     # disable DHCP
@@ -3194,10 +3301,10 @@
                                             help="disables the DHCP on given "
                                             "Interface")
     parser_disable_dhcp.add_argument("-I", "--Interface", required=True,
-                                     choices=['eth0', 'eth1'],
-                                     help="Name of the ethernet interface"
-                                     "(it can be obtained by the command:"
-                                     "network view-config)")
+                                     help="Name of the ethernet interface(it can"
+                                     "be obtained by the "
+                                     "command:network view-config)"
+                                     "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_disable_dhcp.set_defaults(func=disableDHCP)
 
     # get HostName
@@ -3216,10 +3323,10 @@
                                              help="prints out DomainName of "
                                              "given Interface")
     parser_getdomainname.add_argument("-I", "--Interface", required=True,
-                                      choices=['eth0', 'eth1'],
-                                      help="Name of the ethernet interface"
-                                      "(it can be obtained by the command:"
-                                      "network view-config)")
+                                      help="Name of the ethernet interface(it "
+                                      "can be obtained by the "
+                                      "command:network view-config)"
+                                      "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_getdomainname.set_defaults(func=getDomainName)
 
     # set domainname
@@ -3229,10 +3336,10 @@
     parser_setdomainname.add_argument("-D", "--DomainName", required=True,
                                       help="Ex: DomainName=Domain1,Domain2,...")
     parser_setdomainname.add_argument("-I", "--Interface", required=True,
-                                      choices=['eth0', 'eth1'],
-                                      help="Name of the ethernet interface"
-                                      "(it can be obtained by the command:"
-                                      "network view-config)")
+                                      help="Name of the ethernet interface(it "
+                                      "can be obtained by the "
+                                      "command:network view-config)"
+                                      "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_setdomainname.set_defaults(func=setDomainName)
 
     # get MACAddress
@@ -3240,10 +3347,10 @@
                                              help="prints out MACAddress the "
                                              "given Interface")
     parser_getmacaddress.add_argument("-I", "--Interface", required=True,
-                                      choices=['eth0', 'eth1'],
-                                      help="Name of the ethernet interface"
-                                      "(it can be obtained by the command:"
-                                      "network view-config)")
+                                      help="Name of the ethernet interface(it "
+                                      "can be obtained by the "
+                                      "command:network view-config)"
+                                      "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_getmacaddress.set_defaults(func=getMACAddress)
 
     # set MACAddress
@@ -3253,10 +3360,10 @@
                                       help="A MACAddress for the given "
                                       "Interface")
     parser_setmacaddress.add_argument("-I", "--Interface", required=True,
-                                      choices=['eth0', 'eth1'],
-                                      help="Name of the ethernet interface"
-                                      "(it can be obtained by the command:"
-                                      "network view-config)")
+                                    help="Name of the ethernet interface(it can"
+                                    "be obtained by the "
+                                    "command:network view-config)"
+                                    "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_setmacaddress.set_defaults(func=setMACAddress)
 
     # get DefaultGW
@@ -3283,9 +3390,10 @@
                                       help="prints out DNS servers on the "
                                       "given interface")
     parser_getDNS.add_argument("-I", "--Interface", required=True,
-                               choices=['eth0', 'eth1'],
-                               help="Name of the ethernet interface(it can be "
-                               "obtained by the command:network view-config)")
+                               help="Name of the ethernet interface(it can"
+                               "be obtained by the "
+                               "command:network view-config)"
+                               "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_getDNS.set_defaults(func=getDNS)
 
     # set DNS
@@ -3295,9 +3403,10 @@
     parser_setDNS.add_argument("-d", "--DNSServers", required=True,
                                help="Ex: DNSSERVERS=DNS1,DNS2,...")
     parser_setDNS.add_argument("-I", "--Interface", required=True,
-                               choices=['eth0', 'eth1'],
-                               help="Name of the ethernet interface(it can be "
-                               "obtained by the command:network view-config)")
+                               help="Name of the ethernet interface(it can"
+                               "be obtained by the "
+                               "command:network view-config)"
+                               "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_setDNS.set_defaults(func=setDNS)
 
     # get NTP
@@ -3305,9 +3414,10 @@
                                       help="prints out NTP servers on the "
                                       "given interface")
     parser_getNTP.add_argument("-I", "--Interface", required=True,
-                               choices=['eth0', 'eth1'],
-                               help="Name of the ethernet interface(it can be "
-                               "obtained by the command:network view-config)")
+                               help="Name of the ethernet interface(it can"
+                               "be obtained by the "
+                               "command:network view-config)"
+                               "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_getNTP.set_defaults(func=getNTP)
 
     # set NTP
@@ -3317,11 +3427,51 @@
     parser_setNTP.add_argument("-N", "--NTPServers", required=True,
                                help="Ex: NTPSERVERS=NTP1,NTP2,...")
     parser_setNTP.add_argument("-I", "--Interface", required=True,
-                               choices=['eth0', 'eth1'],
-                               help="Name of the ethernet interface(it can be "
-                               "obtained by the command:network view-config)")
+                               help="Name of the ethernet interface(it can"
+                               "be obtained by the "
+                               "command:network view-config)"
+                               "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
     parser_setNTP.set_defaults(func=setNTP)
 
+    # configure IP
+    parser_ip_config = nw_sub.add_parser("addIP", help="Sets IP address to"
+                                         "given interface")
+    parser_ip_config.add_argument("-a", "--address", required=True,
+                                  help="IP address of given interface")
+    parser_ip_config.add_argument("-gw", "--gateway", required=False, default='',
+                                  help="The gateway for given interface")
+    parser_ip_config.add_argument("-l", "--prefixLength", required=True,
+                                  help="The prefixLength of IP address")
+    parser_ip_config.add_argument("-p", "--type", choices=['ipv4', 'ipv6'],
+                                  help="The protocol type of the given"
+                                  "IP address")
+    parser_ip_config.add_argument("-I", "--Interface", required=True,
+                                  help="Name of the ethernet interface(it can"
+                                  "be obtained by the "
+                                  "command:network view-config)"
+                                  "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
+    parser_ip_config.set_defaults(func=addIP)
+
+    # getIP
+    parser_getIP = nw_sub.add_parser("getIP", help="prints out IP address"
+                                     "of given interface")
+    parser_getIP.add_argument("-I", "--Interface", required=True,
+                              help="Name of the ethernet interface(it can"
+                              "be obtained by the command:network view-config)"
+                              "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
+    parser_getIP.set_defaults(func=getIP)
+
+    # rmIP
+    parser_rmIP = nw_sub.add_parser("rmIP", help="deletes IP address"
+                                     "of given interface")
+    parser_rmIP.add_argument("-a", "--address", required=True,
+                                  help="IP address to remove form given Interface")
+    parser_rmIP.add_argument("-I", "--Interface", required=True,
+                             help="Name of the ethernet interface(it can"
+                             "be obtained by the command:network view-config)"
+                             "Ex: eth0 or eth1 or VLAN(VLAN=eth0_50 etc)")
+    parser_rmIP.set_defaults(func=deleteIP)
+
     return parser
 
 def main(argv=None):
