blob: 7012eb200d66557253261c697c9bc3d5ebaab716 [file] [log] [blame]
/*
* Copyright (c) 2009 Mindspeed Technologies, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*
*/
#ifndef _MODULE_VLAN_H_
#define _MODULE_VLAN_H_
#include "types.h"
#include "modules.h"
#include "channels.h"
#include "fe.h"
#include "common_hdrs.h"
/*Internal VLAN entry used by the VLAN engine*/
typedef struct _tVlanEntry {
struct itf itf;
struct slist_entry list;
U16 VlanId; /*In big endian format*/
#ifdef CFG_STATS
U32 total_packets_received;
U32 total_packets_transmitted;
U64 total_bytes_received;
U64 total_bytes_transmitted;
#endif
}VlanEntry, *PVlanEntry;
/*Structure defining the VLAN ENTRY command*/
typedef struct _tVLANCommand {
U16 action; /*Action to perform*/
U16 vlanID;
U8 vlanifname[12];
U8 phyifname[12];
}VlanCommand, *PVlanCommand;
#if defined(COMCERTO_2000)
#define VLAN_MAX_ITF 32
extern VlanEntry vlan_itf[VLAN_MAX_ITF];
#endif
extern struct slist_head vlan_cache[NUM_VLAN_ENTRIES];
void M_VLAN_process_packet(PMetadata mtd) __attribute__((section ("fast_path")));
int vlan_init(void);
void vlan_exit(void);
#if !defined(COMCERTO_2000)
void M_vlan_entry(void) __attribute__((section ("fast_path")));
#endif
void M_vlan_br_encapsulate(PMetadata mtd, PVlanEntry pEntry);
void M_vlan_encapsulate(PMetadata mtd, PVlanEntry pEntry, U16 ethertype, U8 update) __attribute__((section ("fast_path"), noinline));
/** Vlan entry hash calculation (based on vlan id).
*
* @param entry vlan_id VLAN ID in network by order
*
* @return vlan hash index
*
*/
static __inline U32 HASH_VLAN(U16 vlan_id)
{
#if defined(COMCERTO_2000)
/* Use host endianess for the hash calculation so host and pfe arrive at the same result */
vlan_id = ntohs(vlan_id);
#endif
return ((vlan_id >> 12) ^ (vlan_id >> 8) ^ (vlan_id)) & (NUM_VLAN_ENTRIES - 1);
}
#endif /* _MODULE_VLAN_H_ */