Hi Jeff, Sorry, it looks like I got my example links wrong; here’s a case for the ‘exclusive’: https://github.com/FDio/vpp/blob/master/src/plugins/unittest/fib_test.c#L1552
You’ll need your own DPO type and its equivalent create function will replace example’s use of the lookup DPO. dpo_register_new_type is how you register a new DPO type. There are lots of examples to copy. You can chain/stack DPOs together if you want to use additional existing functionality. For example, If you want MPLS label push functionality then you can stack your DPO on an instance of a mpls_label_dpo_t. /neale From: [email protected] <[email protected]> on behalf of Jeff via lists.fd.io <[email protected]> Date: Friday, 9 January 2026 at 1:38 am To: [email protected] <[email protected]> Subject: Re: [vpp-dev] MPLS to node Thanks for the guidance Neale, this definitely helps. I think approach #2 suits my purpose. Looking at the example you linked it looks like I'll use a combination of mpls_label_dpo_create() and fib_table_entry_special_dpo_add(). I'm not clear on all the parameters yet, but will look at it more and try some things. I'll circle back if I can't figure it out. Thanks again, Jeff On 1/6/26 17:51, Neale Ranns via lists.fd.io wrote: > Hi Jeff, > > There isn’t a way to achieve that using the current CLI. > > I would suggest you add a new CLI/API for your feature (e.g. jeff-feat > label 100 … ) and then if: > 1. You want your feature to process then packet and then pass it on to > the normal FIB processing, you would ‘interpose’ your feature’s DPO in > the existing FIB chain (i.e. your CLI would be in addition to the usual > ‘mpls local-label 100 …. via X’). see example: > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FFDio%2F&data=05%7C02%7Cneale%40graphiant.com%7Cc190e854586f470035ae08de4ec3947a%7C162101cdceb34e62ab2e3abc7aeede47%7C0%7C0%7C639034799091128835%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=wuH7VpPjER77JzkkYA60y6SC5OkwNkdLSOVvz%2Fm8E0o%3D&reserved=0<https://github.com/FDio/> > vpp/blob/master/src/plugins/unittest/fib_test.c#L9824 <https:// > github.com/FDio/vpp/blob/master/src/plugins/unittest/fib_test.c#L9824> > and your DPO will need to implement the interpose functionality: > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FFDio%2Fvpp%2Fblob%2Fmaster%2Fsrc%2Fvnet%2Fdpo%2F&data=05%7C02%7Cneale%40graphiant.com%7Cc190e854586f470035ae08de4ec3947a%7C162101cdceb34e62ab2e3abc7aeede47%7C0%7C0%7C639034799091171335%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=CmJqf2SmEX2GfXvrW5ZOKub7V%2FEGr88x3KleNh5B66M%3D&reserved=0<https://github.com/FDio/vpp/blob/master/src/vnet/dpo/> > mpls_label_dpo.c#L1239 > <https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FFDio%2Fvpp%2Fblob%2Fmaster%2Fsrc%2F&data=05%7C02%7Cneale%40graphiant.com%7Cc190e854586f470035ae08de4ec3947a%7C162101cdceb34e62ab2e3abc7aeede47%7C0%7C0%7C639034799091199914%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=ClCjhtJru3zW2SOlwGM4iPLeRkvJHqoFPQJJkqPf6jo%3D&reserved=0 > vnet/dpo/mpls_label_dpo.c#L1239> > > 2. you only want your node to handle the MPLS packets, in which case > your feature can directly create the MPLS table entry and provide the > DPO to use, e.g.: > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FFDio%2Fvpp%2Fblob%2Fmaster%2Fsrc%2Fplugins%2F&data=05%7C02%7Cneale%40graphiant.com%7Cc190e854586f470035ae08de4ec3947a%7C162101cdceb34e62ab2e3abc7aeede47%7C0%7C0%7C639034799091220816%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=D2jLVf9LXC2X3qJCvW03twfzS%2FR8POfHw2%2FShosmuiA%3D&reserved=0<https://github.com/FDio/vpp/blob/master/src/plugins/> > unittest/fib_test.c#L9824 > <https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FFDio%2Fvpp%2Fblob%2Fmaster%2Fsrc%2F&data=05%7C02%7Cneale%40graphiant.com%7Cc190e854586f470035ae08de4ec3947a%7C162101cdceb34e62ab2e3abc7aeede47%7C0%7C0%7C639034799091240878%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=QxW6mrPSMq1jFVHQ9MOQkWhZrjV7SxBJ8flhM7nQ5cU%3D&reserved=0 > plugins/unittest/fib_test.c#L9824> > > /neale > > *From: *[email protected] <[email protected]> on behalf of Jeff via > lists.fd.io <[email protected]> > *Date: *Wednesday, 7 January 2026 at 7:40 am > *To: *[email protected] <[email protected]> > *Subject: *[vpp-dev] MPLS to node > > Hello, > > Is it possible to send incoming MPLS traffic to my_node after a label > pop/swap? For example, if VPP receives an MPLS frame with label 12345: > > 1) pop label 12345 > 2) add labels 100 101 102 > 3) enqueue to my_node > > Maybe something like the following, but I don't know if "mpls > local-label" supports sending to a custom node. I looked at the "via" > options in unformat_fib_route_path(), but nothing jumped out. > > mpls table add 0 > mpls local-label add 100 eos via <my_node> out-labels 100 > mpls local-label add 100 non-eos via <my_node> out-labels 100 > sr mpls policy add bsid 12345 next 100 next 101 next 102 > > or > > mpls table add 0 > mpls local-label add 12345 eos via <my_node> out-labels 100 101 102 > mpls local-label add 12345 non-eos via <my_node> out-labels 100 101 102 > > Thanks, > Jeff > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#26710): https://lists.fd.io/g/vpp-dev/message/26710 Mute This Topic: https://lists.fd.io/mt/117112683/21656 Group Owner: [email protected] Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/14379924/21656/631435203/xyzzy [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
