125b04948SNeale Ranns/*
225b04948SNeale Ranns * Copyright (c) 2018 Cisco and/or its affiliates.
325b04948SNeale Ranns * Licensed under the Apache License, Version 2.0 (the "License");
425b04948SNeale Ranns * you may not use this file except in compliance with the License.
525b04948SNeale Ranns * You may obtain a copy of the License at:
625b04948SNeale Ranns *
725b04948SNeale Ranns *     http://www.apache.org/licenses/LICENSE-2.0
825b04948SNeale Ranns *
925b04948SNeale Ranns * Unless required by applicable law or agreed to in writing, software
1025b04948SNeale Ranns * distributed under the License is distributed on an "AS IS" BASIS,
1125b04948SNeale Ranns * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1225b04948SNeale Ranns * See the License for the specific language governing permissions and
1325b04948SNeale Ranns * limitations under the License.
1425b04948SNeale Ranns */
1525b04948SNeale Ranns
1625b04948SNeale Ranns#ifndef __GBP_FWD_DPO_H__
1725b04948SNeale Ranns#define __GBP_FWD_DPO_H__
1825b04948SNeale Ranns
1925b04948SNeale Ranns#include <vnet/dpo/dpo.h>
2025b04948SNeale Ranns
2125b04948SNeale Ranns/**
2225b04948SNeale Ranns * @brief
2325b04948SNeale Ranns * The GBP FWD DPO. Used in the L3 path to select the correct EPG uplink
2425b04948SNeale Ranns * based on the source EPG.
2525b04948SNeale Ranns */
2625b04948SNeale Rannstypedef struct gbp_fwd_dpo_t_
2725b04948SNeale Ranns{
2825b04948SNeale Ranns  /**
2925b04948SNeale Ranns   * The protocol of packets using this DPO
3025b04948SNeale Ranns   */
3125b04948SNeale Ranns  dpo_proto_t gfd_proto;
3225b04948SNeale Ranns
3325b04948SNeale Ranns  /**
3425b04948SNeale Ranns   * number of locks.
3525b04948SNeale Ranns   */
3625b04948SNeale Ranns  u16 gfd_locks;
3725b04948SNeale Ranns} gbp_fwd_dpo_t;
3825b04948SNeale Ranns
3925b04948SNeale Rannsextern void gbp_fwd_dpo_add_or_lock (dpo_proto_t dproto, dpo_id_t * dpo);
4025b04948SNeale Ranns
4125b04948SNeale Rannsextern dpo_type_t gbp_fwd_dpo_get_type (void);
4225b04948SNeale Ranns
4325b04948SNeale Ranns/**
4425b04948SNeale Ranns * @brief pool of all interface DPOs
4525b04948SNeale Ranns */
4625b04948SNeale Rannsextern gbp_fwd_dpo_t *gbp_fwd_dpo_pool;
4725b04948SNeale Ranns
4825b04948SNeale Rannsstatic inline gbp_fwd_dpo_t *
4925b04948SNeale Rannsgbp_fwd_dpo_get (index_t index)
5025b04948SNeale Ranns{
5125b04948SNeale Ranns  return (pool_elt_at_index (gbp_fwd_dpo_pool, index));
5225b04948SNeale Ranns}
5325b04948SNeale Ranns
5425b04948SNeale Ranns/*
5525b04948SNeale Ranns * fd.io coding-style-patch-verification: ON
5625b04948SNeale Ranns *
5725b04948SNeale Ranns * Local Variables:
5825b04948SNeale Ranns * eval: (c-set-style "gnu")
5925b04948SNeale Ranns * End:
6025b04948SNeale Ranns */
6125b04948SNeale Ranns
6225b04948SNeale Ranns#endif
63