#include "ipw.h" int ip_initialize() { return do_ipinit(); } int ip_finalize() { return do_ipfini(); } int ip_setflushloop(int loop) { do_ipflushloop(loop); } int ip_nicAddVLAN(const char *dev, int vlanID) { char vlan[5]; char vlanDevice[15]; const char *argv[10]; sprintf(vlan, "%d", vlanID); sprintf(vlanDevice, "%s.%d", dev, vlanID); argv[0] = "add"; //command argv[1] = "link"; argv[2] = dev; argv[3] = "name"; argv[4] = vlanDevice; argv[5] = "type"; argv[6] = "vlan"; argv[7] = "id"; argv[8] = vlan; argv[9] = NULL; return do_iplink(9, (char **)argv); } int ip_nicDelVLAN(const char *dev) { const char *argv[5]; argv[0] = "delete"; argv[1] = dev; argv[2] = "type"; argv[3] = "vlan"; argv[4] = NULL; return do_iplink(4, (char **)argv); } int ip_nicAddAddress(const char *dev, const char *family, const char *ifaddr, const char *broadcast, const char *anycast) { const char *argv[9]; int i = 0; argv[i++] = "add"; argv[i++] = ifaddr; if (broadcast != NULL) { argv[i++] = "broadcast"; argv[i++] = broadcast; } if (anycast != NULL) { argv[i++] = "anycast"; argv[i++] = anycast; } argv[i++] = "dev"; argv[i++] = dev; argv[i++] = NULL; if (do_ipfamily(family)) return -1; return do_ipaddr(i - 1, (char **)argv); } int ip_nicDelAddress(const char *dev, const char *family, const char *ifaddr, const char *broadcast, const char *anycast) { const char *argv[9]; int i = 0; argv[i++] = "del"; argv[i++] = ifaddr; if (broadcast != NULL) { argv[i++] = "broadcast"; argv[i++] = broadcast; } if (anycast != NULL) { argv[i++] = "anycast"; argv[i++] = anycast; } argv[i++] = "dev"; argv[i++] = dev; argv[i++] = NULL; if (do_ipfamily(family)) return -1; return do_ipaddr(i - 1, (char **)argv); } int ip_nicFlushAddresses(const char *dev) { const char *argv[4]; argv[0] = "flush"; argv[1] = "dev"; argv[2] = dev; argv[3] = NULL; return do_ipaddr(3, (char **)argv); } int ip_nicSetMTU(const char *dev, const char *mtu) { const char *argv[5]; argv[0] = "set"; argv[1] = dev; argv[2] = "mtu"; argv[3] = mtu; argv[4] = NULL; return do_iplink(4, (char **)argv); } int ip_nicSetMulticast(const char *dev, unsigned short do_enable) { const char *argv[5]; argv[0] = "set"; argv[1] = dev; argv[2] = "multicast"; argv[3] = (do_enable)? "on" : "off"; argv[4] = NULL; return do_iplink(4, (char **)argv); } int ip_nicSetAllMulticast(const char *dev, unsigned short do_enable) { const char *argv[5]; argv[0] = "set"; argv[1] = dev; argv[2] = "allmulticast"; argv[3] = (do_enable)? "on" : "off"; argv[4] = NULL; return do_iplink(4, (char **)argv); } int ip_nicSetARP(const char *dev, unsigned short do_enable) { const char *argv[5]; argv[0] = "set"; argv[1] = dev; argv[2] = "arp"; argv[3] = (do_enable)? "on" : "off"; argv[4] = NULL; return do_iplink(4, (char **)argv); } int ip_nicChangeState(const char *dev, unsigned short do_up) { const char *argv[4]; argv[0] = "set"; argv[1] = dev; argv[2] = (do_up)? "up" : "down"; argv[3] = NULL; return do_iplink(3, (char **)argv); } int ip_rtAdd(const struct RouteInfo *ri) { const char *argv[26]; argv[0] = "add"; int num = _ip_rtArgv(ri, argv + 1); return do_iproute(num + 1, (char **)argv); } int ip_rtDel(const struct RouteInfo *ri) { const char *argv[26]; argv[0] = "del"; int num = _ip_rtArgv(ri, argv + 1); return do_iproute(num + 1, (char **)argv); } int ip_rtRep(const struct RouteInfo *ri) { const char *argv[26]; argv[0] = "replace"; int num = _ip_rtArgv(ri, argv + 1); return do_iproute(num + 1, (char **)argv); } int _ip_rtArgv(const struct RouteInfo *ri, const char **argv) { int i = 0; if (ri->rt_type) argv[i++] = ri->rt_type; argv[i++] = ri->rt_prefix; if (ri->rt_tos) { argv[i++] = "tos"; argv[i++] = ri->rt_tos; } if (ri->rt_table) { argv[i++] = "table"; argv[i++] = ri->rt_table; } if (ri->rt_scope) { argv[i++] = "scope"; argv[i++] = ri->rt_scope; } if (ri->rt_metric) { argv[i++] = "metric"; argv[i++] = ri->rt_metric; } if (ri->rt_preference) { argv[i++] = "preference"; argv[i++] = ri->rt_preference; } argv[i++] = "via"; argv[i++] = ri->rt_via; argv[i++] = "dev"; argv[i++] = ri->rt_dev; if (ri->rt_weight) { argv[i++] = "weight"; argv[i++] = ri->rt_weight; } if (ri->rt_mtu) { argv[i++] = "mtu"; if (ri->rt_mtu_lock) argv[i++] = "lock"; argv[i++] = ri->rt_mtu; } if (ri->rt_tcp_window) { argv[i++] = "window"; argv[i++] = ri->rt_tcp_window; } argv[i++] = NULL; return i - 1; }