// Close the tap void FreeTap(VLAN *v) { // Validate arguments if (v == NULL) { return; } close(v->fd); FreeVLan(v); }
// Release the packet adapter void VLanPaFree(SESSION *s) { VLAN *v; // Validate arguments if ((s == NULL) || ((v = s->PacketAdapter->Param) == NULL)) { return; } // End the virtual LAN card FreeVLan(v); s->PacketAdapter->Param = NULL; }
// Release the packet adapter void VLanPaFree(SESSION *s) { VLAN *v; ROUTE_TRACKING *t; // Validate arguments if ((s == NULL) || ((v = s->PacketAdapter->Param) == NULL)) { return; } // Release the IP address if you are using DHCP if (IsNt()) { char tmp[MAX_SIZE]; MS_ADAPTER *a; UINT64 now = Tick64(); UINT64 suspend_tick = MsGetSuspendModeBeginTick(); if (suspend_tick == 0 || (suspend_tick + (UINT64)(30 * 1000)) < now) { Format(tmp, sizeof(tmp), VLAN_ADAPTER_NAME_TAG, v->InstanceName); a = MsGetAdapter(tmp); if (a != NULL) { if (a->UseDhcp) { bool ret = Win32ReleaseAddressByGuidEx(a->Guid, 50); Debug("*** Win32ReleaseAddressByGuid = %u\n", ret); } MsFreeAdapter(a); } } } t = v->RouteState; // End the virtual LAN card FreeVLan(v); // End the routing table tracking if (s->ClientModeAndUseVLan) { RouteTrackingStop(s, t); } s->PacketAdapter->Param = NULL; }