X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdpo%2Fdpo.h;h=0eeca67b74bf379e4b390fb2b1cdb5c6de96a425;hb=2303cb181b51f63c909cd506125c1f832432865a;hp=21a2ae2a33de021787d1d5d43aa13abe1eb76148;hpb=f55957e71c58e38770b12af0720e9d19a8f6a8d6;p=vpp.git diff --git a/src/vnet/dpo/dpo.h b/src/vnet/dpo/dpo.h index 21a2ae2a33d..0eeca67b74b 100644 --- a/src/vnet/dpo/dpo.h +++ b/src/vnet/dpo/dpo.h @@ -224,6 +224,14 @@ extern void dpo_lock(dpo_id_t *dpo); */ extern void dpo_unlock(dpo_id_t *dpo); +/** + * @brief + * Make an interpose DPO from an original + */ +extern void dpo_mk_interpose(const dpo_id_t *original, + const dpo_id_t *parent, + dpo_id_t *clone); + /** * @brief Set/create a DPO ID * The DPO will be locked. @@ -373,6 +381,18 @@ typedef u32* (*dpo_get_next_node_t)(const dpo_id_t *dpo); */ typedef u32 (*dpo_get_urpf_t)(const dpo_id_t *dpo); +/** + * @brief Called during FIB interposition when the originally + * registered DPO is used to 'clone' an instance for interposition + * at a particular location in the FIB graph. + * The parent is the next DPO in the chain that the clone will + * be used instead of. The clone may then choose to stack itself + * on the parent. + */ +typedef void (*dpo_mk_interpose_t)(const dpo_id_t *original, + const dpo_id_t *parent, + dpo_id_t *clone); + /** * @brief A virtual function table regisitered for a DPO type */ @@ -405,6 +425,10 @@ typedef struct dpo_vft_t_ * Get uRPF interface */ dpo_get_urpf_t dv_get_urpf; + /** + * Signal on an interposed child that the parent has changed + */ + dpo_mk_interpose_t dv_mk_interpose; } dpo_vft_t;