<!-- Remove above warning line while reporting the issue -->

## Issue Description

### What's the version are you using
free5gc v3.3.0, ubuntu20.04 VirtualBox VM

### Is your feature request related to a problem? Please describe.
This feature is related to [issue0](https://forum.free5gc.org/t/qos-enforcement-implemenation-in-upf-gtp/2009/2) and [issue1](https://github.com/free5gc/free5gc/issues/295)

### Describe the solution you'd like
Is it possible to include link layer (layer2) functionality in the "upfgtp" interface?  Since it is possible to have [QoS enforcement](https://docs.openvswitch.org/en/latest/topics/dpdk/qos/) based on Open vSwitch (maximum bit-rate, guaranteed bit-rate, and priority), I am thinking of connecting OvS between the upfgtp and kernel space. Openflow currently does not support GPRS and I need to place OvS between the N3 interface and the UPF to let it process traffic effectively with the help of OpenFlow. 

However, upfgtp is a "raw IP socket" and seems not to have a link layer and can't be detected or controlled by OvS.

I am trying to do this because I can have flows switching between different QoS queues (slices, if queue configurations can be controlled from SMF) without reconnecting UE.

### Describe alternatives/workarounds you've considered
1. connecting OvS on the N6 interface to enforce traffic shaping (it won't be able to differentiate traffic between UEs)
2. replacing gtp5g altogether with [OvS gtpu](https://gruyaume.medium.com/tutorial-create-a-gtp-u-tunnel-in-ubuntu-using-ovs-a4ac5df1d3dd) (UPF can't establish control over this tunnel, this gtpu has link layer but it's IFLA_INFO_KIND is 'tun' instead of 'gtp5g')
3. if [gtp5g](https://github.com/free5gc/gtp5g) supports switching between QoS queues without reconnecting. Even better if it supports reconfiguring and enforcing QoS parameters to a single queue/slice without UE reconnecting.

### Additional context
packages exiting upfgtp seem to have no link layer:
![image](https://github.com/free5gc/free5gc/assets/58356619/ab3614c6-e344-4a87-bfe6-47f7b91bb396)
upfgtp is a "raw IP" at link layer:
![image](https://github.com/free5gc/free5gc/assets/58356619/91aea54b-5eb4-4e68-9708-f3e17ad0c7ec)

## Issue Template Checklist

<!-- Please answer the questions below. If not the issue might be disregarded. -->

### If willing to resolve an issue by submitting Pull request, please consider the points below.

<!-- free5GC will be happy to welcome first contributor’s, in order to broaden the community. -->

- [ ] Yes, I have the time and I know how to start.
- [ *] Yes, I have the time but I don't know how to start, I would need guidance.
- [ ] No, I don't have the time, although I believe I could do it if I had the time...
- [ ] No, I don't have the time and I wouldn't even know how to start.

[Feat] Layer 2 support for gtp-u tunnel (upfgtp)
This is a GitHub Issue
repo:free5gc
owner:free5gc
Title : [Feat] Layer 2 support for gtp-u tunnel (upfgtp)
Issue date:

--- start body ---
<!-- Remove above warning line while reporting the issue -->

## Issue Description

### What's the version are you using
free5gc v3.3.0, ubuntu20.04 VirtualBox VM

### Is your feature request related to a problem? Please describe.
This feature is related to [issue0](https://forum.free5gc.org/t/qos-enforcement-implemenation-in-upf-gtp/2009/2) and [issue1](https://github.com/free5gc/free5gc/issues/295)

### Describe the solution you'd like
Is it possible to include link layer (layer2) functionality in the "upfgtp" interface?  Since it is possible to have [QoS enforcement](https://docs.openvswitch.org/en/latest/topics/dpdk/qos/) based on Open vSwitch (maximum bit-rate, guaranteed bit-rate, and priority), I am thinking of connecting OvS between the upfgtp and kernel space. Openflow currently does not support GPRS and I need to place OvS between the N3 interface and the UPF to let it process traffic effectively with the help of OpenFlow. 

However, upfgtp is a "raw IP socket" and seems not to have a link layer and can't be detected or controlled by OvS.

I am trying to do this because I can have flows switching between different QoS queues (slices, if queue configurations can be controlled from SMF) without reconnecting UE.

### Describe alternatives/workarounds you've considered
1. connecting OvS on the N6 interface to enforce traffic shaping (it won't be able to differentiate traffic between UEs)
2. replacing gtp5g altogether with [OvS gtpu](https://gruyaume.medium.com/tutorial-create-a-gtp-u-tunnel-in-ubuntu-using-ovs-a4ac5df1d3dd) (UPF can't establish control over this tunnel, this gtpu has link layer but it's IFLA_INFO_KIND is 'tun' instead of 'gtp5g')
3. if [gtp5g](https://github.com/free5gc/gtp5g) supports switching between QoS queues without reconnecting. Even better if it supports reconfiguring and enforcing QoS parameters to a single queue/slice without UE reconnecting.

### Additional context
packages exiting upfgtp seem to have no link layer:
![image](https://github.com/free5gc/free5gc/assets/58356619/ab3614c6-e344-4a87-bfe6-47f7b91bb396)
upfgtp is a "raw IP" at link layer:
![image](https://github.com/free5gc/free5gc/assets/58356619/91aea54b-5eb4-4e68-9708-f3e17ad0c7ec)

## Issue Template Checklist

<!-- Please answer the questions below. If not the issue might be disregarded. -->

### If willing to resolve an issue by submitting Pull request, please consider the points below.

<!-- free5GC will be happy to welcome first contributor’s, in order to broaden the community. -->

- [ ] Yes, I have the time and I know how to start.
- [ *] Yes, I have the time but I don't know how to start, I would need guidance.
- [ ] No, I don't have the time, although I believe I could do it if I had the time...
- [ ] No, I don't have the time and I wouldn't even know how to start.

--- end body ---
