From 50c644fc1fada20715d1873cbc8db3388e5186da Mon Sep 17 00:00:00 2001 From: Anand B Jyoti Date: Mon, 9 Jan 2017 03:25:49 +0530 Subject: [PATCH] examples/ip_pipeline: check VLAN and MPLS parameters This commit add to CLI command check for the following errors 1. SVLAN and CVLAN IDs greater than 12 bits 2. MPLS ID greater than 20 bits 3. max number of supported MPLS labels to avoid array overflow It prevents running CLI commands with invalid parameters. Signed-off-by: Anand B Jyoti Acked-by: Cristian Dumitrescu --- .../ip_pipeline/pipeline/pipeline_routing.c | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/examples/ip_pipeline/pipeline/pipeline_routing.c b/examples/ip_pipeline/pipeline/pipeline_routing.c index 3aadbf9143..3deaff9c4e 100644 --- a/examples/ip_pipeline/pipeline/pipeline_routing.c +++ b/examples/ip_pipeline/pipeline/pipeline_routing.c @@ -494,6 +494,26 @@ app_pipeline_routing_add_route(struct app_params *app, /* data */ if (data->port_id >= p->n_ports_out) return -1; + + /* Valid range of VLAN tags 12 bits */ + if (data->flags & PIPELINE_ROUTING_ROUTE_QINQ) + if ((data->l2.qinq.svlan & 0xF000) || + (data->l2.qinq.cvlan & 0xF000)) + return -1; + + /* Max number of MPLS labels supported */ + if (data->flags & PIPELINE_ROUTING_ROUTE_MPLS) { + uint32_t i; + + if (data->l2.mpls.n_labels > + PIPELINE_ROUTING_MPLS_LABELS_MAX) + return -1; + + /* Max MPLS label value 20 bits */ + for (i = 0; i < data->l2.mpls.n_labels; i++) + if (data->l2.mpls.labels[i] & 0xFFF00000) + return -1; + } } break; -- 2.20.1