Extending SPGW-C/U control and messaging

43 views
Skip to first unread message

Yiannis Yiakoumis

unread,
Jun 1, 2020, 7:04:10 PM6/1/20
to OMEC Developers
Hi all,We are looking to add functionality for application detection workflows at OMEC (using the BESS-switch dataplane). We are building the DP functionality as a BESS plugin module, and wondering what is the best way to add control primitives into it.Looking at the code, one approach is to use and extend existing ADC messages and functionality in ngic-cp. This would work but it is tightly coupled with the control plane code. Any recommendation on how to do this in a more pluggable/modular way?

Thanks,

Yiannis

Jamshed, Muhammad

unread,
Jun 1, 2020, 7:19:25 PM6/1/20
to Yiannis Yiakoumis, OMEC Developers

Hi,

 

You can use BESS controller (such as cpiface) to send such messages to the dataplane.  Please have a look at cpiface/ directory to see how you can use GRPC to communicate with the BESS daemon. The controller is written in C++. But you can also use Python or Golang to develop the controller. Also, have a look at topics/up4-bess branch where we have started building 5G UPF pipeline.

 

Thanks,

--Asim

--
You received this message because you are subscribed to the Google Groups "OMEC Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+u...@opennetworking.org.
To view this discussion on the web visit https://groups.google.com/a/opennetworking.org/d/msgid/omec-dev/e3c17837-bd8f-4216-9f24-0a0acd757cab%40opennetworking.org.

Yiannis Yiakoumis

unread,
Jun 1, 2020, 7:39:55 PM6/1/20
to Muhammad Jamshed, OMEC Developers
Thanks Asim.

To make sure I understand this correctly: does the datapath support multiple controllers simultaneously? For example, can we have one module controlled by its own controller through a grpc channel, and then the rest of the pipeline be controlled by SPGW-C through the zmq interface?

Is there any module within OMEC that does this already?

Best,
Yiannis



Yiannis .


On Mon, Jun 01, 2020 at 4:19 PM, Muhammad Jamshed <muhammad...@intel.com> wrote:

Hi,

 

You can use BESS controller (such as cpiface) to send such messages to the dataplane.  Please have a look at cpiface/ directory to see how you can use GRPC to communicate with the BESS daemon. The controller is written in C++. But you can also use Python or Golang to develop the controller. Also, have a look at topics/up4-bess branch where we have started building 5G UPF pipeline.

 

Thanks,

--Asim

 

From: omec-dev@opennetworking.org <omec-dev@opennetworking.org> On Behalf Of Yiannis Yiakoumis
Sent: Monday, June 1, 2020 4:04 PM
To: OMEC Developers <omec-dev@opennetworking.org>
Subject: Extending SPGW-C/U control and messaging

 

Hi all,We are looking to add functionality for application detection workflows at OMEC (using the BESS-switch dataplane). We are building the DP functionality as a BESS plugin module, and wondering what is the best way to add control primitives into it.Looking at the code, one approach is to use and extend existing ADC messages and functionality in ngic-cp. This would work but it is tightly coupled with the control plane code. Any recommendation on how to do this in a more pluggable/modular way?

 

Thanks,

Yiannis

--
You received this message because you are subscribed to the Google Groups "OMEC Developers" group.

To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+unsubscribe@opennetworking.org.

--
You received this message because you are subscribed to the Google Groups "OMEC Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+unsubscribe@opennetworking.org.
To view this discussion on the web visit https://groups.google.com/a/opennetworking.org/d/msgid/omec-dev/MWHPR11MB19346F139D2BA3438233DD18898A0%40MWHPR11MB1934.namprd11.prod.outlook.com.

Jamshed, Muhammad

unread,
Jun 1, 2020, 8:48:16 PM6/1/20
to Yiannis Yiakoumis, OMEC Developers

Yes.

 

You can use multiple controllers. You can check that route_control.py and zmq-cpiface.cc are each talking to different modules at the same time (route_control.py communicating with s1u_routes and sgi_routes), while zmq-cpiface.cc is responsible for sending messages from CP to upf (GTPUEncap and GTPUDecap modules in the master branch to be more precise). I am not sure how you plan to get ADC module functional. You will probably have to augment zmq-cpiface.cc to do this. This will ensure that you don’t get into any race conditions… especially during the times of session creations and deletions.

 

--Asim

To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+u...@opennetworking.org.

--
You received this message because you are subscribed to the Google Groups "OMEC Developers" group.

To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+u...@opennetworking.org.

Yiannis Yiakoumis

unread,
Jun 2, 2020, 1:09:25 PM6/2/20
to Muhammad Jamshed, OMEC Developers
Great, thanks much Asim!



Yiannis .


On Mon, Jun 01, 2020 at 5:48 PM, Muhammad Jamshed <muhammad...@intel.com> wrote:

Yes.

 

You can use multiple controllers. You can check that route_control.py and zmq-cpiface.cc are each talking to different modules at the same time (route_control.py communicating with s1u_routes and sgi_routes), while zmq-cpiface.cc is responsible for sending messages from CP to upf (GTPUEncap and GTPUDecap modules in the master branch to be more precise). I am not sure how you plan to get ADC module functional. You will probably have to augment zmq-cpiface.cc to do this. This will ensure that you don’t get into any race conditions… especially during the times of session creations and deletions.

 

--Asim

 

From: Yiannis Yiakoumis <gyiakoumis@gmail.com>
Sent: Monday, June 1, 2020 4:40 PM
To: Jamshed, Muhammad <muhammad.jamshed@intel.com>
Cc: OMEC Developers <omec-dev@opennetworking.org>
Subject: RE: Extending SPGW-C/U control and messaging

 

Thanks Asim.

 

To make sure I understand this correctly: does the datapath support multiple controllers simultaneously? For example, can we have one module controlled by its own controller through a grpc channel, and then the rest of the pipeline be controlled by SPGW-C through the zmq interface?

 

Is there any module within OMEC that does this already?

 

Best,

Yiannis

 

 

 

Yiannis .

 

 

On Mon, Jun 01, 2020 at 4:19 PM, Muhammad Jamshed <muhammad.jamshed@intel.com> wrote:

Hi,

 

You can use BESS controller (such as cpiface) to send such messages to the dataplane.  Please have a look at cpiface/ directory to see how you can use GRPC to communicate with the BESS daemon. The controller is written in C++. But you can also use Python or Golang to develop the controller. Also, have a look at topics/up4-bess branch where we have started building 5G UPF pipeline.

 

Thanks,

--Asim

 

From: omec-dev@opennetworking.org <omec-dev@opennetworking.org> On Behalf Of Yiannis Yiakoumis
Sent: Monday, June 1, 2020 4:04 PM
To: OMEC Developers <omec-dev@opennetworking.org>
Subject: Extending SPGW-C/U control and messaging

 

Hi all,We are looking to add functionality for application detection workflows at OMEC (using the BESS-switch dataplane). We are building the DP functionality as a BESS plugin module, and wondering what is the best way to add control primitives into it.Looking at the code, one approach is to use and extend existing ADC messages and functionality in ngic-cp. This would work but it is tightly coupled with the control plane code. Any recommendation on how to do this in a more pluggable/modular way?

 

Thanks,

Yiannis

--
You received this message because you are subscribed to the Google Groups "OMEC Developers" group.

To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+unsubscribe@opennetworking.org.

--
You received this message because you are subscribed to the Google Groups "OMEC Developers" group.

To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+unsubscribe@opennetworking.org.

Yiannis Yiakoumis

unread,
Jul 2, 2020, 3:34:36 PM7/2/20
to OMEC Developers, Yiannis Yiakoumis, OMEC Developers, Jamshed, Muhammad
Couple of follow-up thoughts/questions on this one. 

First of, this post assumes that capability to integrate projects from different codebases into OMEC is of interest. If this is a wrong assumption, let me know. Otherwise, please read below:)

Adding a network token function (NTF) to upf-epc proved to be pretty straightforward and clean, given BESS' modular structure. The only things that had to change were Makefiles and the pipeline description; other than that OMEC is ignorant/unaware of the NTF internals. This is pretty cool and gives an integration path for multiple vendors that have to keep their codebase separate. 

I am not sure what is the best way to have a similar behavior in the control plane. 

A. One option is to connect directly to BESS with a dedicated controller for your module using its protobuf messages. We've done this for prototyping and it is fine. But there are a few things missing:

1. how do we hook-up to critical events, such as upf coming up, restarting, etc so that we can manage and install state appropriately? Are these implied by kubernetes events (e.g., containers restarting etc)? Or shall we keep a persistent connection between the controller and the userplane, and reset state whenever this resets?
2. Protection: our controller seems capable of handling everything, which is not ideal from a security perspective. Is there a way for upf-epc to limit a controller's reach to functions related with a specific module?

B. The other option is to connect to SPGW-C which can then pass all messages to the datapath. It looks like in the current state this requires modifications to SPGW-C, which needs to be aware of the specific messages. One way to address this, is for SPGW-C to automatically load all protobuf definitions, and proxy messages to/from the datapath through a generic gRPC interface (along with some generic messages about the deployment's lifecycle). 

It's likely I miss something, so please point me into the right direction if there is a standard way to do this.

Best,
Yiannis
On Tuesday, June 2, 2020 at 10:09:25 AM UTC-7 Yiannis Yiakoumis wrote:
Great, thanks much Asim!



Yiannis .


On Mon, Jun 01, 2020 at 5:48 PM, Muhammad Jamshed <muhammad...@intel.com> wrote:

Yes.

 

You can use multiple controllers. You can check that route_control.py and zmq-cpiface.cc are each talking to different modules at the same time (route_control.py communicating with s1u_routes and sgi_routes), while zmq-cpiface.cc is responsible for sending messages from CP to upf (GTPUEncap and GTPUDecap modules in the master branch to be more precise). I am not sure how you plan to get ADC module functional. You will probably have to augment zmq-cpiface.cc to do this. This will ensure that you don’t get into any race conditions… especially during the times of session creations and deletions.

 

--Asim

 

From: Yiannis Yiakoumis <gyiak...@gmail.com>
Sent: Monday, June 1, 2020 4:40 PM

To: Jamshed, Muhammad <muhammad...@intel.com>
Cc: OMEC Developers <omec...@opennetworking.org>

To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+u...@opennetworking.org.

--
You received this message because you are subscribed to the Google Groups "OMEC Developers" group.

To unsubscribe from this group and stop receiving emails from it, send an email to omec-dev+u...@opennetworking.org.

Reply all
Reply to author
Forward
0 new messages