cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

prestera_router_hw.h (2197B)


      1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
      2/* Copyright (c) 2019-2021 Marvell International Ltd. All rights reserved. */
      3
      4#ifndef _PRESTERA_ROUTER_HW_H_
      5#define _PRESTERA_ROUTER_HW_H_
      6
      7struct prestera_vr {
      8	struct list_head router_node;
      9	refcount_t refcount;
     10	u32 tb_id;			/* key (kernel fib table id) */
     11	u16 hw_vr_id;			/* virtual router ID */
     12	u8 __pad[2];
     13};
     14
     15struct prestera_rif_entry {
     16	struct prestera_rif_entry_key {
     17		struct prestera_iface iface;
     18	} key;
     19	struct prestera_vr *vr;
     20	unsigned char addr[ETH_ALEN];
     21	u16 hw_id; /* rif_id */
     22	struct list_head router_node; /* ht */
     23};
     24
     25struct prestera_ip_addr {
     26	union {
     27		__be32 ipv4;
     28		struct in6_addr ipv6;
     29	} u;
     30	enum {
     31		PRESTERA_IPV4 = 0,
     32		PRESTERA_IPV6
     33	} v;
     34};
     35
     36struct prestera_fib_key {
     37	struct prestera_ip_addr addr;
     38	u32 prefix_len;
     39	u32 tb_id;
     40};
     41
     42struct prestera_fib_info {
     43	struct prestera_vr *vr;
     44	struct list_head vr_node;
     45	enum prestera_fib_type {
     46		PRESTERA_FIB_TYPE_INVALID = 0,
     47		/* It can be connected route
     48		 * and will be overlapped with neighbours
     49		 */
     50		PRESTERA_FIB_TYPE_TRAP,
     51		PRESTERA_FIB_TYPE_DROP
     52	} type;
     53};
     54
     55struct prestera_fib_node {
     56	struct rhash_head ht_node; /* node of prestera_vr */
     57	struct prestera_fib_key key;
     58	struct prestera_fib_info info; /* action related info */
     59};
     60
     61struct prestera_rif_entry *
     62prestera_rif_entry_find(const struct prestera_switch *sw,
     63			const struct prestera_rif_entry_key *k);
     64void prestera_rif_entry_destroy(struct prestera_switch *sw,
     65				struct prestera_rif_entry *e);
     66struct prestera_rif_entry *
     67prestera_rif_entry_create(struct prestera_switch *sw,
     68			  struct prestera_rif_entry_key *k,
     69			  u32 tb_id, const unsigned char *addr);
     70struct prestera_fib_node *prestera_fib_node_find(struct prestera_switch *sw,
     71						 struct prestera_fib_key *key);
     72void prestera_fib_node_destroy(struct prestera_switch *sw,
     73			       struct prestera_fib_node *fib_node);
     74struct prestera_fib_node *
     75prestera_fib_node_create(struct prestera_switch *sw,
     76			 struct prestera_fib_key *key,
     77			 enum prestera_fib_type fib_type);
     78int prestera_router_hw_init(struct prestera_switch *sw);
     79void prestera_router_hw_fini(struct prestera_switch *sw);
     80
     81#endif /* _PRESTERA_ROUTER_HW_H_ */