Skip to content

Commit 8708e58

Browse files
Merge pull request #23 from att/v1
V1
2 parents 1786d93 + 3011faa commit 8708e58

File tree

13 files changed

+298
-93
lines changed

13 files changed

+298
-93
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ on:
88
branches: '**'
99
pull_request:
1010
branches: [ master ]
11+
workflow_dispatch:
1112

1213
defaults:
1314
run:

README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Create the basic build image with all the required libraries
2929

3030
```bash
3131
$ cd openoffload/cpp/framework/build
32-
$ docker build -t grpcbuild:v1beta1 .
32+
$ docker build -t grpcbuild:v1 .
3333
```
3434

3535
#### Step 2
@@ -42,7 +42,7 @@ $ cd ..
4242
$ cp ../../../protos/openoffload.proto .
4343
```
4444
```bash
45-
$ docker build -t opofbld:v1beta1 .
45+
$ docker build -t opofbld:v1 .
4646
$ docker image ls
4747
```
4848

@@ -51,10 +51,17 @@ Access the container to get the files
5151

5252
```bash
5353
$ mkdir results
54-
$ docker create -it --name results opofbld:v1alpha5 /bin/bash
54+
$ docker create -it --name results opofbld:v1 /bin/bash
5555
$ docker cp results:/home/grpc/local/tests/bin/ results/
5656
$ cd results
5757
$ mkdir log
58+
```
59+
Run the binaries in separate windows :
60+
```bash
61+
./bin/opof_server_test
62+
and
63+
./bin/opof_client_test -f -v
64+
```
5865

5966

6067
### C++ alternate method assumes all dependencies are installed on the build path

RELEASE_NOTES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
* Centos 8
66
* Ubuntu 18.04
77

8+
## Release v1
9+
10+
- Promote v1beta1 to v1 as the first official release.
11+
- Add Integration FAQ to help hardware developers understand details of the solution
12+
13+
814
## Release v1beta1
915

1016
### Bug Fixes

doc/Integration_Faq.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Open Offload Integration FAQ
2+
3+
## Introduction
4+
This is not intended to be a comprehensive list of answers, but rather a compendium of questions and answers to help prospective developers implement a working open offload server.
5+
6+
## FAQ
7+
8+
1. **Question:** Are there any examples of an open offload server that can be used to get started?
9+
10+
**Answer:** Yes, there are a few implementations that are available.
11+
12+
* *Python:* There is a test Python implementation in this github repository under the test directory. The python client can be used to test new C/C++ server implementations.
13+
14+
* *C/C++:* There is a sample C++ implementation in this github repository under the openoffload directory.
15+
16+
* *C Implementation:* Nivdia has kindly put their implementation in github under open source at: [Firewall Offload]https://github.com/BodongWang/firewall_offload
17+
18+
2. **Question:** Can multiple VMs talking to the same SmartNIC be supported?
19+
20+
**Answer:** Currently the implementation is focused on a single VM supporting a single SmartNIC. However more deployment models could be supported depending on customer use cases.
21+
22+
3. **Question:** What is the impact/use of inLIF/outLIF for SmartNIC deployments?
23+
24+
**Answer:** The inLIF/outLIF parameters are just placeholders for the future network router case. They can be just hardwired to 1 and 2 for the basic SmartNIC case.
25+
26+
4. **Question:** Are there any management functions in the gRPC API?
27+
28+
**Answer:** Not currently but this is something we would like to add and are actively soliciting feedback and suggestions.
29+
30+
5. **Question:** Does the current implementation support IPv6?
31+
32+
**Answer:** Yes the current implementation supports IPv6
33+
34+
6. **Question:** Does the current implementation support VLANs?
35+
36+
**Answer:** Yes the current implementation supports VLANs
37+
38+
7. **Question:** Can the current implementation support High Availability scenarios?
39+
40+
**Answer:** Yes the current implementation supports High Availability Scenarios.
41+
42+
8. **Question:** Where is the TCP State managed?
43+
44+
**Answer:** All TCP state is managed by the firewall, as there are several TCP attack vectors that the firewall needs to protect against and it is easier if there is only one entity managing state. Therefore all TCP control packets must be sent to the firewall and the offload device should not act on them.
45+
46+
9. **Question:** Is there a preferred implementation technology for the offload server?
47+
48+
**Answer:** Providing the server implements the gRPC API to the offload client the implementation approach and technology is left open to the developers of the offload device.
49+
50+
10. **Question:** Can other applications beside firewall use the API?
51+
52+
**Answer:** Yes. Any application that can use the match/action parameters in the API can use the API for session offload.
53+
54+
11. **Question:** Are additional offload types like UPF accelleration supported?
55+
56+
**Answer:** Not at this time. The plan is to extend the API over time to handle more use cases through extenstion to the match/action parameters. We encourage suggestions on additional offload use cases.
57+
58+
12. **Question:** How are timeouts handled?
59+
60+
**Answer:** The device will track the cacheTimeout setting on each session entry. When no packets are received after the timeout period, the device will remove the session from the session table and stream the closed session and stats to the application over the getClosedSessions gRPC call. The application will handle the TCP and UDP overall timeout. If additional packets are received , it will be a cache miss so the application will process these packets and determine if the session should be re-inserted into the session table. The device does not need to track anything about the two disjoint in time session table entries, the application will sum up the total packet/byte counts.

openoffload/cpp/framework/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ SERVER_NAME :=opof_server_test
2222
PROTO_NAME := openoffload
2323
DIRECTORIES := directories
2424
PROTOS := protos
25-
VERSION=0.1
25+
VERSION=1.0
2626
SERVER_LIB := libopof_server.a
2727
CLIENT_LIB := libopof_client.a
2828
#
@@ -76,10 +76,10 @@ CC := gcc -g
7676
CPP := g++ -g
7777

7878
#CFLAGS := -c -O2 -I include -I /usr/local/include -I $(ROOT_DIR)/local/include -std=gnu99 -Wall -DDEBUG -DVISIBLE
79-
CFLAGS := -c -O0 -I include -Wno-undef -I $(ROOT_DIR)/local/include -std=gnu99 -Wall -DDEBUG
79+
CFLAGS := -c -O0 -I include -Wno-undef -I $(ROOT_DIR)/local/include -std=gnu99 -Wall
8080
#CPPFLAGS := -c -O2 -std=c++11 -I ./ -I include -I $(ROOT_DIR)/local/include -Wno-deprecated-declarations -DDEBUG -DVISIBLE
8181
#CPPFLAGS := -c -O2 -std=c++11 -Wno-undef -I include -I $(ROOT_DIR)/local/include -Wno-deprecated-declarations -DSSL -DDEBUG
82-
CPPFLAGS := -c -O0 -std=c++11 -Wno-undef -I include -I $(ROOT_DIR)/local/include -Werror -Wall -Wno-deprecated-declarations -DDEBUG
82+
CPPFLAGS := -c -O0 -std=c++11 -Wno-undef -I include -I $(ROOT_DIR)/local/include -Werror -Wall -Wno-deprecated-declarations
8383
#
8484
#
8585
# Link Flags

openoffload/cpp/framework/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ Create the basic build image with all the required libraries
275275

276276
```bash
277277
$ cd openoffload/cpp/framework/build
278-
$ docker build -t grpcbuild:v1beta1 .
278+
$ docker build -t grpcbuild:v1 .
279279
```
280280
## Step 2
281281
Create the build container from the base image
@@ -286,23 +286,23 @@ $ cd ..
286286
$ cp ../../../protos/openoffload.proto .
287287
```
288288
```bash
289-
$ docker build -t opofbld:v1beta1 .
289+
$ docker build -t opofbld:v1 .
290290
$ docker image ls
291291
```
292292
## Step 3
293293
Access the container to get the files
294294

295295
```bash
296296
$ mkdir results
297-
$ docker create -it --name results opofbld:v1alpha5 /bin/bash
297+
$ docker create -it --name results opofbld:v1 /bin/bash
298298
$ docker cp results:/home/grpc/local/tests/bin/ results/
299299
$ cd results
300300
$ mkdir log
301301
```
302302

303303
Start the server (optionally set -p port, -a address )
304304
```bash
305-
$ ./opof_server_test
305+
$ ./bin/opof_server_test
306306

307307
OPOF: Starting OPOF Version 0.1
308308
Info: Creating Insecure Server
@@ -311,7 +311,7 @@ Server listening on: localhost:3443
311311
```
312312
Check the client main program for the available performance and config tests to run
313313
```bash
314-
$ ./opof_server_client -f -v
314+
$ ./bin/opof_client_test -f -v
315315

316316
```
317317
# References

openoffload/cpp/framework/doc/Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ PROJECT_NAME = OpenOffload
3838
# could be handy for archiving the generated documentation or if some version
3939
# control system is used.
4040

41-
PROJECT_NUMBER = v1beta1
41+
PROJECT_NUMBER = v1
4242

4343
# Using the PROJECT_BRIEF tag one can provide an optional one line description
4444
# for a project that appears at the top of each page and should give viewer a

openoffload/cpp/framework/include/opof_grpc.h

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,21 @@ using grpc::ServerReader;
5050
using grpc::ServerWriter;
5151
using grpc::ClientWriter;
5252
//
53-
using openoffload::v1beta1::SessionTable;
54-
//using openoffload::v1alpha4::SessionStatisticsTable;
55-
using openoffload::v1beta1::sessionRequest;
56-
using openoffload::v1beta1::sessionRequestArgs;
57-
using openoffload::v1beta1::addSessionResponse;
58-
using openoffload::v1beta1::sessionResponse;
59-
using openoffload::v1beta1::sessionResponses;
60-
using openoffload::v1beta1::sessionResponseError;
61-
using openoffload::v1beta1::sessionId;
62-
using openoffload::v1beta1::IP_VERSION;
63-
using openoffload::v1beta1::PROTOCOL_ID;
64-
using openoffload::v1beta1::ACTION_TYPE;
65-
using openoffload::v1beta1::REQUEST_STATUS;
66-
using openoffload::v1beta1::ADD_SESSION_STATUS;
67-
using openoffload::v1beta1::SESSION_STATE;
68-
using openoffload::v1beta1::SESSION_CLOSE_CODE;
69-
using openoffload::v1beta1::actionParameters;
53+
using openoffload::v1::SessionTable;
54+
using openoffload::v1::sessionRequest;
55+
using openoffload::v1::sessionRequestArgs;
56+
using openoffload::v1::addSessionResponse;
57+
using openoffload::v1::sessionResponse;
58+
using openoffload::v1::sessionResponses;
59+
using openoffload::v1::sessionResponseError;
60+
using openoffload::v1::sessionId;
61+
using openoffload::v1::IP_VERSION;
62+
using openoffload::v1::PROTOCOL_ID;
63+
using openoffload::v1::ACTION_TYPE;
64+
using openoffload::v1::REQUEST_STATUS;
65+
using openoffload::v1::ADD_SESSION_STATUS;
66+
using openoffload::v1::SESSION_STATE;
67+
using openoffload::v1::SESSION_CLOSE_CODE;
68+
using openoffload::v1::actionParameters;
7069

7170
#endif // _OPOF_GRPC_H

openoffload/cpp/framework/include/opof_test_util.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ extern "C" {
3030
*
3131
*/
3232
int kill_test_server(void);
33+
int start_test_server(void);
3334
int range(int low, int high);
3435
int get_key(const char *filename, char *key);
3536
sessionResponse_t **createSessionResponse(int size, int *sessionCount);

0 commit comments

Comments
 (0)