From 2f09bfc8bedd7f5af3b336af43a2d515b61e6dae Mon Sep 17 00:00:00 2001 From: Filip Tehlar Date: Mon, 15 Nov 2021 10:26:56 +0000 Subject: [PATCH] vcl: add DSCP support in VCL Type: feature Signed-off-by: Filip Tehlar Change-Id: I835675267c997b5dc92a0aaccdb58648bc786bb9 --- src/vcl/vcl_private.h | 1 + src/vcl/vppcom.c | 13 +++++++++++++ src/vcl/vppcom.h | 1 + src/vnet/session/application_interface.h | 1 + src/vnet/session/session_node.c | 1 + 5 files changed, 17 insertions(+) diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index 285985e6529..66d418084ee 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -168,6 +168,7 @@ typedef struct vcl_session_ u32 rcvbuf_size; // VPP-TBD: Hack until support setsockopt(SO_RCVBUF) transport_endpt_ext_cfg_t *ext_config; + u8 dscp; #if VCL_ELOG elog_track_t elog_track; diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 207e208979c..107b109dc75 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -219,6 +219,7 @@ vcl_send_session_connect (vcl_worker_t * wrk, vcl_session_t * s) memset (mp, 0, sizeof (*mp)); mp->client_index = wrk->api_client_handle; mp->context = s->session_index; + mp->dscp = s->dscp; mp->wrk_index = wrk->vpp_wrk_index; mp->is_ip4 = s->transport.is_ip4; mp->parent_handle = s->parent_handle; @@ -3608,6 +3609,18 @@ vppcom_session_attr (uint32_t session_handle, uint32_t op, rv = VPPCOM_EINVAL; break; + case VPPCOM_ATTR_SET_DSCP: + if (buffer && buflen && (*buflen >= sizeof (u8))) + { + session->dscp = *(u8 *) buffer; + + VDBG (2, "VPPCOM_ATTR_SET_DSCP: %u (0x%x), buflen %d,", + *(u8 *) buffer, *(u8 *) buffer, *buflen); + } + else + rv = VPPCOM_EINVAL; + break; + case VPPCOM_ATTR_SET_TX_FIFO_LEN: if (buffer && buflen && (*buflen == sizeof (u32))) { diff --git a/src/vcl/vppcom.h b/src/vcl/vppcom.h index 19a01c798b5..46517ad8c8c 100644 --- a/src/vcl/vppcom.h +++ b/src/vcl/vppcom.h @@ -145,6 +145,7 @@ typedef enum VPPCOM_ATTR_GET_VRF, VPPCOM_ATTR_GET_DOMAIN, VPPCOM_ATTR_SET_ENDPT_EXT_CFG, + VPPCOM_ATTR_SET_DSCP, } vppcom_attr_op_t; typedef struct _vcl_poll diff --git a/src/vnet/session/application_interface.h b/src/vnet/session/application_interface.h index ca8dc38c4e1..733a4627c2e 100644 --- a/src/vnet/session/application_interface.h +++ b/src/vnet/session/application_interface.h @@ -408,6 +408,7 @@ typedef struct session_connect_msg_ u32 ckpair_index; u8 crypto_engine; u8 flags; + u8 dscp; uword ext_config; } __clib_packed session_connect_msg_t; diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index fe4e7324218..7565b43b29b 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -173,6 +173,7 @@ session_mq_connect_one (session_connect_msg_t *mp) a->sep.port = mp->port; a->sep.transport_proto = mp->proto; a->sep.peer.fib_index = mp->vrf; + a->sep.dscp = mp->dscp; clib_memcpy_fast (&a->sep.peer.ip, &mp->lcl_ip, sizeof (mp->lcl_ip)); if (mp->is_ip4) { -- 2.16.6