OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [net/] [bonding/] [bond_alb.h] - Blame information for rev 79

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 * Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved.
3
 *
4
 * This program is free software; you can redistribute it and/or modify it
5
 * under the terms of the GNU General Public License as published by the
6
 * Free Software Foundation; either version 2 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * This program is distributed in the hope that it will be useful, but
10
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12
 * for more details.
13
 *
14
 * You should have received a copy of the GNU General Public License along
15
 * with this program; if not, write to the Free Software Foundation, Inc.,
16
 * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17
 *
18
 * The full GNU General Public License is included in this distribution in the
19
 * file called LICENSE.
20
 *
21
 */
22
 
23
#ifndef __BOND_ALB_H__
24
#define __BOND_ALB_H__
25
 
26
#include <linux/if_ether.h>
27
 
28
struct bonding;
29
struct slave;
30
 
31
#define BOND_ALB_INFO(bond)   ((bond)->alb_info)
32
#define SLAVE_TLB_INFO(slave) ((slave)->tlb_info)
33
 
34
struct tlb_client_info {
35
        struct slave *tx_slave; /* A pointer to slave used for transmiting
36
                                 * packets to a Client that the Hash function
37
                                 * gave this entry index.
38
                                 */
39
        u32 tx_bytes;           /* Each Client acumulates the BytesTx that
40
                                 * were tranmitted to it, and after each
41
                                 * CallBack the LoadHistory is devided
42
                                 * by the balance interval
43
                                 */
44
        u32 load_history;       /* This field contains the amount of Bytes
45
                                 * that were transmitted to this client by
46
                                 * the server on the previous balance
47
                                 * interval in Bps.
48
                                 */
49
        u32 next;               /* The next Hash table entry index, assigned
50
                                 * to use the same adapter for transmit.
51
                                 */
52
        u32 prev;               /* The previous Hash table entry index,
53
                                 * assigned to use the same
54
                                 */
55
};
56
 
57
/* -------------------------------------------------------------------------
58
 * struct rlb_client_info contains all info related to a specific rx client
59
 * connection. This is the Clients Hash Table entry struct
60
 * -------------------------------------------------------------------------
61
 */
62
struct rlb_client_info {
63
        __be32 ip_src;          /* the server IP address */
64
        __be32 ip_dst;          /* the client IP address */
65
        u8  mac_dst[ETH_ALEN];  /* the client MAC address */
66
        u32 next;               /* The next Hash table entry index */
67
        u32 prev;               /* The previous Hash table entry index */
68
        u8  assigned;           /* checking whether this entry is assigned */
69
        u8  ntt;                /* flag - need to transmit client info */
70
        struct slave *slave;    /* the slave assigned to this client */
71
        u8 tag;                 /* flag - need to tag skb */
72
        unsigned short vlan_id; /* VLAN tag associated with IP address */
73
};
74
 
75
struct tlb_slave_info {
76
        u32 head;       /* Index to the head of the bi-directional clients
77
                         * hash table entries list. The entries in the list
78
                         * are the entries that were assigned to use this
79
                         * slave for transmit.
80
                         */
81
        u32 load;       /* Each slave sums the loadHistory of all clients
82
                         * assigned to it
83
                         */
84
};
85
 
86
struct alb_bond_info {
87
        struct timer_list       alb_timer;
88
        struct tlb_client_info  *tx_hashtbl; /* Dynamically allocated */
89
        spinlock_t              tx_hashtbl_lock;
90
        u32                     unbalanced_load;
91
        int                     tx_rebalance_counter;
92
        int                     lp_counter;
93
        /* -------- rlb parameters -------- */
94
        int rlb_enabled;
95
        struct packet_type      rlb_pkt_type;
96
        struct rlb_client_info  *rx_hashtbl;    /* Receive hash table */
97
        spinlock_t              rx_hashtbl_lock;
98
        u32                     rx_hashtbl_head;
99
        u8                      rx_ntt; /* flag - need to transmit
100
                                         * to all rx clients
101
                                         */
102
        struct slave            *next_rx_slave;/* next slave to be assigned
103
                                                * to a new rx client for
104
                                                */
105
        u32                     rlb_interval_counter;
106
        u8                      primary_is_promisc;        /* boolean */
107
        u32                     rlb_promisc_timeout_counter;/* counts primary
108
                                                             * promiscuity time
109
                                                             */
110
        u32                     rlb_update_delay_counter;
111
        u32                     rlb_update_retry_counter;/* counter of retries
112
                                                          * of client update
113
                                                          */
114
        u8                      rlb_rebalance;  /* flag - indicates that the
115
                                                 * rx traffic should be
116
                                                 * rebalanced
117
                                                 */
118
        struct vlan_entry       *current_alb_vlan;
119
};
120
 
121
int bond_alb_initialize(struct bonding *bond, int rlb_enabled);
122
void bond_alb_deinitialize(struct bonding *bond);
123
int bond_alb_init_slave(struct bonding *bond, struct slave *slave);
124
void bond_alb_deinit_slave(struct bonding *bond, struct slave *slave);
125
void bond_alb_handle_link_change(struct bonding *bond, struct slave *slave, char link);
126
void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave);
127
int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev);
128
void bond_alb_monitor(struct work_struct *);
129
int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr);
130
void bond_alb_clear_vlan(struct bonding *bond, unsigned short vlan_id);
131
#endif /* __BOND_ALB_H__ */
132
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.