/* Remove virtual IP interfaces from the system. */ void ssh_vxworks_virtual_adapter_uninit(void) { VxWorksVa *va; int i; STATUS status; for (i = 0; i < vxworks_va_num; i++) { va = &vxworks_va_tab[i]; if (!va->cookie) continue; #if defined(WITH_IPV6) && defined(INET6) if (ip6Detach(i, vxworks_va_devname) != OK) SSH_TRACE(SSH_D_ERROR, ("%s: ip6Detach failed", va->name)); #endif /* defined(WITH_IPV6) && defined(INET6) */ if (ipDetach(i, vxworks_va_devname) != OK) SSH_TRACE(SSH_D_ERROR, ("%s: ipDetach failed", va->name)); if ((status = muxDevStop(va->cookie)) != OK) SSH_TRACE( SSH_D_ERROR, ("%s: muxDevStop failed, status %d", va->name, (int)status)); if ((status = muxDevUnload(vxworks_va_devname, i)) != OK) SSH_TRACE( SSH_D_ERROR, ("%s: muxDevUnload failed, status %d", va->name, (int)status)); va->cookie = NULL; } }
static int sal_if_do_deconfig(char *pfx, END_OBJ *eo, char *if_name, int if_unit) /* * Function: * Purpose: * Parameters: * Returns: */ { #if VX_VERSION == 66 || VX_VERSION == 68 char ifconfigstr[32]; #endif /* VX_VERSION == 66 || VX_VERSION == 68 */ LOG_INFO(BSL_LS_APPL_END, (BSL_META("%s: Stopping %s %d %08x \n"), pfx, if_name, if_unit, (uint32)eo)); if (OK != muxDevStop(eo)) { cli_out("%s: Error: muxDevStop failed: %s%d\n", pfx, if_name, if_unit); return(-1); } #if VX_VERSION == 66 || VX_VERSION == 68 sprintf(ifconfigstr, "%s%d down", if_name, if_unit); if (ERROR == ifconfig(ifconfigstr)) { cli_out("%s: ifconfig down failed: %s%d <-- %s\n", pfx, if_name, if_unit, ifconfigstr); return(-1); } sprintf(ifconfigstr, "%s%d detach", if_name, if_unit); if (ERROR == ifconfig(ifconfigstr)) { cli_out("%s: ifconfig down failed: %s%d <-- %s\n", pfx, if_name, if_unit, ifconfigstr); return(-1); } #else /* VX_VERSION == 66 || VX_VERSION == 68 */ LOG_INFO(BSL_LS_APPL_END, (BSL_META("%s: Clearing Routes\n"), pfx)); #ifdef VXWORKS_NETWORK_STACK_6_5 #ifdef VXWORKS_NETWORK_STACK_FIXME_SHOW #error VXWORKS_NETWORK_STACK_FIXME_SHOW #endif #else ifRouteDelete(if_name, if_unit); #endif /* VXWORKS_NETWORK_STACK_6_5 */ LOG_INFO(BSL_LS_APPL_END, (BSL_META("%s: Unloading\n"), pfx)); if (OK != muxDevUnload(if_name, if_unit)) { cli_out("%s: Error: muxDevUnload failed: %s%d\n", pfx, if_name, if_unit); return(-1); } LOG_INFO(BSL_LS_APPL_END, (BSL_META("%s: Stopped and Unloaded: %s%d\n"), pfx, if_name, if_unit)); #endif /* VX_VERSION == 66 || VX_VERSION == 68 */ return(0); }
/* Add virtual IP interfaces to the system. */ void ssh_vxworks_virtual_adapter_init(void) { VxWorksVa *va; STATUS status; int i, started, ip_attached; void *cookie; unsigned short if_index; vxworks_va_nettask = taskIdSelf(); for (i = 0; i < vxworks_va_num; i++) { va = &vxworks_va_tab[i]; started = 0; ip_attached = 0; memset(va, 0, sizeof *va); ssh_snprintf(va->name, sizeof va->name, "%s%d", vxworks_va_devname, i); memset(va->enet_addr, 0, sizeof va->enet_addr); memcpy(va->enet_addr, vxworks_va_oui, sizeof vxworks_va_oui); va->enet_addr[sizeof va->enet_addr - 1] = (unsigned char)i; if (!(cookie = muxDevLoad(i, vxworks_va_load, "", FALSE, va))) { SSH_TRACE(SSH_D_ERROR, ("%s: muxDevLoad failed", va->name)); goto fail; } if ((status = muxDevStart(cookie)) != OK) { SSH_TRACE( SSH_D_ERROR, ("%s: muxDevStart failed, status %d", va->name, (int)status)); goto fail; } started = 1; if (ipAttach(i, vxworks_va_devname) != OK) { SSH_TRACE(SSH_D_ERROR, ("%s: ipAttach failed", va->name)); goto fail; } ip_attached = 1; #if defined(WITH_IPV6) && defined(INET6) if (ip6Attach(i, vxworks_va_devname) != OK) { SSH_TRACE(SSH_D_ERROR, ("%s: ip6Attach failed", va->name)); goto fail; } #endif /* defined(WITH_IPV6) && defined(INET6) */ if (!(if_index = ifNameToIfIndex(va->name))) { SSH_TRACE( SSH_D_ERROR, ("%s: cannot get interface index after IP attach", va->name)); goto fail; } va->ifnum = if_index - 1; va->cookie = cookie; continue; fail: if (ip_attached) ipDetach(i, vxworks_va_devname); if (started) muxDevStop(cookie); if (cookie) muxDevUnload(vxworks_va_devname, i); } }