Broadcom SDK and wireless driver: another attempt to update to ver. 5.10.147.0
[tomato.git] / release / src-rt / include / ctf / hndctf.h
blob48e0b8b1018c234f74b9a28ee8b17c8efc03d20b
1 /*
2 * Copyright (C) 2009, Broadcom Corporation
3 * All Rights Reserved.
4 *
5 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
6 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
7 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
8 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
10 * $Id: hndctf.h,v 1.1.2.5 2010/01/06 19:09:50 Exp $
13 #ifndef _HNDCTF_H_
14 #define _HNDCTF_H_
16 #include <bcmutils.h>
17 #include <proto/ethernet.h>
19 #define CTF_ENAB(ci) (((ci) != NULL) && (ci)->_ctf)
21 #define CTF_ACTION_TAG (1 << 0)
22 #define CTF_ACTION_UNTAG (1 << 1)
23 #define CTF_ACTION_SNAT (1 << 2)
24 #define CTF_ACTION_DNAT (1 << 3)
26 #define ctf_attach(osh, n, m, c, a) \
27 (ctf_attach_fn ? ctf_attach_fn(osh, n, m, c, a) : NULL)
28 #define ctf_forward(ci, p) (ci)->fn.forward(ci, p)
29 #define ctf_isenabled(ci, d) (CTF_ENAB(ci) ? (ci)->fn.isenabled(ci, d) : FALSE)
30 #define ctf_isbridge(ci, d) (CTF_ENAB(ci) ? (ci)->fn.isbridge(ci, d) : FALSE)
31 #define ctf_enable(ci, d, e) (CTF_ENAB(ci) ? (ci)->fn.enable(ci, d, e) : BCME_OK)
32 #define ctf_brc_add(ci, b) (CTF_ENAB(ci) ? (ci)->fn.brc_add(ci, b) : BCME_OK)
33 #define ctf_brc_delete(ci, e) (CTF_ENAB(ci) ? (ci)->fn.brc_delete(ci, e) : BCME_OK)
34 #define ctf_brc_update(ci, b) (CTF_ENAB(ci) ? (ci)->fn.brc_update(ci, b) : BCME_OK)
35 #define ctf_brc_lkup(ci, e) (CTF_ENAB(ci) ? (ci)->fn.brc_lkup(ci, e) : NULL)
36 #define ctf_ipc_add(ci, i) (CTF_ENAB(ci) ? (ci)->fn.ipc_add(ci, i) : BCME_OK)
37 #define ctf_ipc_delete(ci, sip, dip, p, sp, dp) \
38 (CTF_ENAB(ci) ? (ci)->fn.ipc_delete(ci, sip, dip, p, sp, dp) : BCME_OK)
39 #define ctf_ipc_lkup(ci, sip, dip, p, sp, dp) \
40 (CTF_ENAB(ci) ? (ci)->fn.ipc_lkup(ci, sip, dip, p, sp, dp) : NULL)
41 #define ctf_dev_register(ci, d, b) \
42 (CTF_ENAB(ci) ? (ci)->fn.dev_register(ci, d, b) : BCME_OK)
43 #define ctf_detach(ci) if (CTF_ENAB(ci)) (ci)->fn.detach(ci)
44 #define ctf_dump(ci, b) if (CTF_ENAB(ci)) (ci)->fn.dump(ci, b)
45 #define ctf_dev_unregister(ci, d) if (CTF_ENAB(ci)) (ci)->fn.dev_unregister(ci, d)
47 typedef struct ctf_pub ctf_t;
48 typedef struct ctf_brc ctf_brc_t;
49 typedef struct ctf_ipc ctf_ipc_t;
51 typedef void (*ctf_detach_cb_t)(ctf_t *ci, void *arg);
52 typedef ctf_t * (*ctf_attach_t)(osl_t *osh, uint8 *name, uint32 *msg_level,
53 ctf_detach_cb_t cb, void *arg);
54 typedef void (*ctf_detach_t)(ctf_t *ci);
55 typedef int32 (*ctf_forward_t)(ctf_t *ci, void *p);
56 typedef bool (*ctf_isenabled_t)(ctf_t *ci, void *dev);
57 typedef bool (*ctf_isbridge_t)(ctf_t *ci, void *dev);
58 typedef int32 (*ctf_brc_add_t)(ctf_t *ci, ctf_brc_t *brc);
59 typedef int32 (*ctf_brc_delete_t)(ctf_t *ci, uint8 *ea);
60 typedef int32 (*ctf_brc_update_t)(ctf_t *ci, ctf_brc_t *brc);
61 typedef ctf_brc_t * (*ctf_brc_lkup_t)(ctf_t *ci, uint8 *da);
62 typedef int32 (*ctf_ipc_add_t)(ctf_t *ci, ctf_ipc_t *ipc);
63 typedef int32 (*ctf_ipc_delete_t)(ctf_t *ci, uint32 sip, uint32 dip, uint8 proto,
64 uint16 sp, uint16 dp);
65 typedef ctf_ipc_t * (*ctf_ipc_lkup_t)(ctf_t *ci, uint32 sip, uint32 dip, uint8 proto,
66 uint16 sp, uint16 dp);
67 typedef int32 (*ctf_enable_t)(ctf_t *ci, void *dev, bool enable);
68 typedef int32 (*ctf_dev_register_t)(ctf_t *ci, void *dev, bool br);
69 typedef void (*ctf_dev_unregister_t)(ctf_t *ci, void *dev);
70 #if defined(BCMDBG_DUMP)
71 typedef void (*ctf_dump_t)(ctf_t *ci, struct bcmstrbuf *b);
72 #endif
74 typedef struct ctf_fn {
75 ctf_detach_t detach;
76 ctf_forward_t forward;
77 ctf_isenabled_t isenabled;
78 ctf_isbridge_t isbridge;
79 ctf_brc_add_t brc_add;
80 ctf_brc_delete_t brc_delete;
81 ctf_brc_update_t brc_update;
82 ctf_brc_lkup_t brc_lkup;
83 ctf_ipc_add_t ipc_add;
84 ctf_ipc_delete_t ipc_delete;
85 ctf_ipc_lkup_t ipc_lkup;
86 ctf_enable_t enable;
87 ctf_dev_register_t dev_register;
88 ctf_dev_unregister_t dev_unregister;
89 ctf_detach_cb_t detach_cb;
90 void *detach_cb_arg;
91 #if defined(BCMDBG_DUMP)
92 ctf_dump_t dump;
93 #endif
94 } ctf_fn_t;
96 struct ctf_pub {
97 bool _ctf; /* Global CTF enable/disable */
98 ctf_fn_t fn; /* Exported functions */
101 struct ctf_brc {
102 struct ctf_brc *next; /* Pointer to brc entry */
103 struct ether_addr dhost; /* MAC addr of host */
104 uint16 vid; /* VLAN id to use on txif */
105 void *txifp; /* Interface connected to host */
106 uint32 action; /* Tag or untag the frames */
107 uint32 hits; /* Num frames matching brc entry */
108 uint32 live; /* Counter used to expire the entry */
111 typedef struct ctf_conn_tuple {
112 uint32 sip, dip;
113 uint16 sp, dp;
114 uint8 proto;
115 } ctf_conn_tuple_t;
117 typedef struct ctf_nat {
118 uint32 ip;
119 uint16 port;
120 } ctf_nat_t;
122 struct ctf_ipc {
123 struct ctf_ipc *next; /* Pointer to ipc entry */
124 ctf_conn_tuple_t tuple; /* Tuple to uniquely id the flow */
125 uint16 vid; /* VLAN id to use on txif */
126 struct ether_addr dhost; /* Destination MAC address */
127 struct ether_addr shost; /* Source MAC address */
128 void *txif; /* Target interface to send */
129 uint32 action; /* NAT and/or VLAN actions */
130 uint32 hits; /* Num frames matching ipc entry */
131 uint32 live; /* Counter used to expire the entry */
132 struct ctf_nat nat[2]; /* Manip data for SNAT, DNAT */
135 extern ctf_t *ctf_kattach(osl_t *osh, uint8 *name);
136 extern void ctf_kdetach(ctf_t *kci);
137 extern ctf_attach_t ctf_attach_fn;
138 extern ctf_t *_ctf_attach(osl_t *osh, uint8 *name, uint32 *msg_level,
139 ctf_detach_cb_t cb, void *arg);
141 #endif /* _HNDCTF_H_ */