diff --git a/datapath-windows/ovsext/IpHelper.c b/datapath-windows/ovsext/IpHelper.c index c734b0ecc2..876da92254 100644 --- a/datapath-windows/ovsext/IpHelper.c +++ b/datapath-windows/ovsext/IpHelper.c @@ -39,34 +39,6 @@ static LIST_ENTRY ovsInstanceList; /* Passive-level lock used to protect the internal adapter object list. */ static ERESOURCE ovsInstanceListLock; -/* - * This structure is used to define each adapter instance. - * - * Note: - * Only when the internal IP is configured and virtual - * internal port is connected, the IP helper request can be - * queued. - * - * We only keep internal IP for reference, it will not be used for determining - * SRC IP of the Tunnel. - * - * The lock must not raise the IRQL higher than PASSIVE_LEVEL in order for the - * route manipulation functions, i.e. GetBestRoute, to work. - */ -typedef struct _OVS_IPHELPER_INSTANCE -{ - LIST_ENTRY link; - - BOOLEAN isIpConfigured; - UINT32 portNo; - GUID netCfgId; - MIB_IF_ROW2 internalRow; - MIB_IPINTERFACE_ROW internalIPRow; - UINT32 ipAddress; - - ERESOURCE lock; -} OVS_IPHELPER_INSTANCE, *POVS_IPHELPER_INSTANCE; - /* * FWD_ENTRY --------> IPFORWARD_ENTRY * | @@ -1070,7 +1042,7 @@ OvsCreateIPNeighEntry(PMIB_IPNET_ROW2 ipNeigh, RtlCopyMemory(entry->macAddr, ipNeigh->PhysicalAddress, ETH_ADDR_LEN); InitializeListHead(&entry->fwdList); - entry->context = (PVOID)instance; + entry->instance = instance; return entry; } @@ -1934,7 +1906,7 @@ OvsStartIpHelper(PVOID data) ipAddr = ipn->ipAddr; MIB_IPNET_ROW2 ipNeigh; NTSTATUS status; - POVS_IPHELPER_INSTANCE instance = (POVS_IPHELPER_INSTANCE)ipn->context; + POVS_IPHELPER_INSTANCE instance = ipn->instance; NdisReleaseSpinLock(&ovsIpHelperLock); ExAcquireResourceExclusiveLite(&ovsInstanceListLock, TRUE); diff --git a/datapath-windows/ovsext/IpHelper.h b/datapath-windows/ovsext/IpHelper.h index 0556965cca..25adf6ea20 100644 --- a/datapath-windows/ovsext/IpHelper.h +++ b/datapath-windows/ovsext/IpHelper.h @@ -32,17 +32,44 @@ #define OVS_IPNEIGH_TIMEOUT 100000000 // 10 s + /* + * This structure is used to define each adapter instance. + * + * Note: + * Only when the internal IP is configured and virtual + * internal port is connected, the IP helper request can be + * queued. + * + * We only keep internal IP for reference, it will not be used for determining + * SRC IP of the Tunnel. + * + * The lock must not raise the IRQL higher than PASSIVE_LEVEL in order for the + * route manipulation functions, i.e. GetBestRoute, to work. + */ +typedef struct _OVS_IPHELPER_INSTANCE +{ + LIST_ENTRY link; + + BOOLEAN isIpConfigured; + UINT32 portNo; + GUID netCfgId; + MIB_IF_ROW2 internalRow; + MIB_IPINTERFACE_ROW internalIPRow; + UINT32 ipAddress; + + ERESOURCE lock; +} OVS_IPHELPER_INSTANCE, *POVS_IPHELPER_INSTANCE; typedef struct _OVS_IPNEIGH_ENTRY { - UINT8 macAddr[ETH_ADDR_LEN]; - UINT16 refCount; - UINT32 ipAddr; - UINT32 pad; - UINT64 timeout; - LIST_ENTRY link; - LIST_ENTRY slink; - LIST_ENTRY fwdList; - PVOID context; + UINT8 macAddr[ETH_ADDR_LEN]; + UINT16 refCount; + UINT32 ipAddr; + UINT32 pad; + UINT64 timeout; + LIST_ENTRY link; + LIST_ENTRY slink; + LIST_ENTRY fwdList; + POVS_IPHELPER_INSTANCE instance; } OVS_IPNEIGH_ENTRY, *POVS_IPNEIGH_ENTRY; typedef struct _OVS_IPFORWARD_ENTRY {