]> git.proxmox.com Git - mirror_ovs.git/blame - datapath-windows/ovsext/IpHelper.h
Windows: Add internal switch port per OVS bridge
[mirror_ovs.git] / datapath-windows / ovsext / IpHelper.h
CommitLineData
c803536e
SS
1/*
2 * Copyright (c) 2014 VMware, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
fa1324c9
SG
17#ifndef __IP_HELPER_H_
18#define __IP_HELPER_H_ 1
c803536e
SS
19
20#include <ntddk.h>
21#include <netioapi.h>
22
23#define OVS_FWD_HASH_TABLE_SIZE ((UINT32)1 << 10)
24#define OVS_FWD_HASH_TABLE_MASK (OVS_FWD_HASH_TABLE_SIZE - 1)
25
26#define OVS_ROUTE_HASH_TABLE_SIZE ((UINT32)1 << 8)
27#define OVS_ROUTE_HASH_TABLE_MASK (OVS_ROUTE_HASH_TABLE_SIZE - 1)
28
29#define OVS_NEIGH_HASH_TABLE_SIZE ((UINT32)1 << 8)
30#define OVS_NEIGH_HASH_TABLE_MASK (OVS_NEIGH_HASH_TABLE_SIZE - 1)
31
32#define OVS_IPNEIGH_TIMEOUT 100000000 // 10 s
33
34
35typedef struct _OVS_IPNEIGH_ENTRY {
b3123b20 36 UINT8 macAddr[ETH_ADDR_LEN];
c803536e
SS
37 UINT16 refCount;
38 UINT32 ipAddr;
39 UINT32 pad;
40 UINT64 timeout;
41 LIST_ENTRY link;
42 LIST_ENTRY slink;
43 LIST_ENTRY fwdList;
44} OVS_IPNEIGH_ENTRY, *POVS_IPNEIGH_ENTRY;
45
46typedef struct _OVS_IPFORWARD_ENTRY {
47 IP_ADDRESS_PREFIX prefix;
48 UINT32 nextHop;
49 UINT16 refCount;
50 LIST_ENTRY link;
51 LIST_ENTRY fwdList;
52} OVS_IPFORWARD_ENTRY, *POVS_IPFORWARD_ENTRY;
53
54typedef union _OVS_FWD_INFO {
55 struct {
56 UINT32 dstIpAddr;
57 UINT32 srcIpAddr;
b3123b20
NR
58 UINT8 dstMacAddr[ETH_ADDR_LEN];
59 UINT8 srcMacAddr[ETH_ADDR_LEN];
c803536e
SS
60 UINT32 srcPortNo;
61 };
62 UINT64 value[3];
63} OVS_FWD_INFO, *POVS_FWD_INFO;
64
65typedef struct _OVS_FWD_ENTRY {
66 OVS_FWD_INFO info;
67 POVS_IPFORWARD_ENTRY ipf;
68 POVS_IPNEIGH_ENTRY ipn;
69 LIST_ENTRY link;
70 LIST_ENTRY ipfLink;
71 LIST_ENTRY ipnLink;
72} OVS_FWD_ENTRY, *POVS_FWD_ENTRY;
73
74
75enum {
76 OVS_IP_HELPER_INTERNAL_ADAPTER_UP,
77 OVS_IP_HELPER_FWD_REQUEST,
78};
79
80typedef VOID (*OvsIPHelperCallback)(PNET_BUFFER_LIST nbl,
81 UINT32 inPort,
82 PVOID tunnelKey,
83 PVOID cbData1,
84 PVOID cbData2,
85 NTSTATUS status,
86 POVS_FWD_INFO fwdInfo);
87
88typedef struct _OVS_FWD_REQUEST_INFO {
89 PNET_BUFFER_LIST nbl;
90 UINT32 inPort;
91 OvsIPv4TunnelKey tunnelKey;
92 OvsIPHelperCallback cb;
93 PVOID cbData1;
94 PVOID cbData2;
95} OVS_FWD_REQUEST_INFO, *POVS_FWD_REQUEST_INFO;
96
97
98typedef struct _OVS_IP_HELPER_REQUEST {
99 LIST_ENTRY link;
100 UINT32 command;
101 union {
102 OVS_FWD_REQUEST_INFO fwdReq;
103 UINT32 dummy;
104 };
105} OVS_IP_HELPER_REQUEST, *POVS_IP_HELPER_REQUEST;
106
107
108typedef struct _OVS_IP_HELPER_THREAD_CONTEXT {
109 KEVENT event;
110 PVOID threadObject;
111 UINT32 exit;
112} OVS_IP_HELPER_THREAD_CONTEXT, *POVS_IP_HELPER_THREAD_CONTEXT;
113
114NTSTATUS OvsInitIpHelper(NDIS_HANDLE ndisFilterHandle);
115VOID OvsCleanupIpHelper(VOID);
116
12e888ba 117VOID OvsInternalAdapterUp(GUID *netCfgInstanceId);
c803536e
SS
118VOID OvsInternalAdapterDown(VOID);
119
120NTSTATUS OvsFwdIPHelperRequest(PNET_BUFFER_LIST nbl, UINT32 inPort,
121 const PVOID tunnelKey,
122 OvsIPHelperCallback cb,
123 PVOID cbData1,
124 PVOID cbData2);
125NTSTATUS OvsLookupIPFwdInfo(UINT32 dstIp, POVS_FWD_INFO info);
126VOID OvsCancelFwdIpHelperRequest(PNET_BUFFER_LIST nbl);
127
fa1324c9 128#endif /* __IP_HELPER_H_ */