mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 19:39:28 +00:00
eigrpd: Start fixing eigrp_interface
The EIGRP interface handling code created 2 levels of interface information, the ei( created per *connected* address?????) and the ifp->info pointer. Start the combination of pushing these together and cleaning up the weirdness that is these two data structures. This commit probably breaks eigrp's handling of interfaces. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
98e6d77f93
commit
79b3087675
@ -159,7 +159,7 @@ int eigrp_if_new_hook(struct interface *ifp)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
ifp->info = XCALLOC(MTYPE_EIGRP_IF_INFO, sizeof(struct eigrp_if_info));
|
||||
ifp->info = XCALLOC(MTYPE_EIGRP_IF_INFO, sizeof(struct eigrp_interface));
|
||||
|
||||
IF_OIFS(ifp) = route_table_init();
|
||||
IF_OIFS_PARAMS(ifp) = route_table_init();
|
||||
|
@ -29,9 +29,9 @@
|
||||
#define _ZEBRA_EIGRP_MACROS_H_
|
||||
|
||||
#define DECLARE_IF_PARAM(T, P) T P; u_char P##__config:1
|
||||
#define IF_EIGRP_IF_INFO(I) ((struct eigrp_if_info *)((I)->info))
|
||||
#define IF_EIGRP_IF_INFO(I) ((struct eigrp_interface *)((I)->info))
|
||||
#define IF_OIFS(I) (IF_EIGRP_IF_INFO (I)->eifs)
|
||||
#define IF_OIFS_PARAMS(I) (IF_EIGRP_IF_INFO (I)->params)
|
||||
#define IF_OIFS_PARAMS(I) (IF_EIGRP_IF_INFO (I)->eparams)
|
||||
|
||||
#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
|
||||
#define IF_DEF_PARAMS(I) (IF_EIGRP_IF_INFO (I)->def_params)
|
||||
|
@ -135,10 +135,39 @@ struct eigrp {
|
||||
QOBJ_FIELDS
|
||||
};
|
||||
DECLARE_QOBJ_TYPE(eigrp)
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
struct eigrp_if_params {
|
||||
DECLARE_IF_PARAM(u_char, passive_interface); /* EIGRP Interface is
|
||||
passive: no sending or
|
||||
receiving (no need to
|
||||
join multicast groups)
|
||||
*/
|
||||
DECLARE_IF_PARAM(u_int32_t, v_hello); /* Hello Interval */
|
||||
DECLARE_IF_PARAM(u_int16_t, v_wait); /* Router Hold Time Interval */
|
||||
DECLARE_IF_PARAM(u_char, type); /* type of interface */
|
||||
DECLARE_IF_PARAM(u_int32_t, bandwidth);
|
||||
DECLARE_IF_PARAM(u_int32_t, delay);
|
||||
DECLARE_IF_PARAM(u_char, reliability);
|
||||
DECLARE_IF_PARAM(u_char, load);
|
||||
|
||||
DECLARE_IF_PARAM(char *,
|
||||
auth_keychain); /* Associated keychain with interface*/
|
||||
DECLARE_IF_PARAM(int, auth_type); /* EIGRP authentication type */
|
||||
};
|
||||
|
||||
enum { MEMBER_ALLROUTERS = 0,
|
||||
MEMBER_MAX,
|
||||
};
|
||||
|
||||
/*EIGRP interface structure*/
|
||||
struct eigrp_interface {
|
||||
struct eigrp_if_params *def_params;
|
||||
struct route_table *eparams;
|
||||
struct route_table *eifs;
|
||||
|
||||
/*multicast group refcnts */
|
||||
unsigned int membership_counts[MEMBER_MAX];
|
||||
|
||||
/* This interface's parent eigrp instance. */
|
||||
struct eigrp *eigrp;
|
||||
|
||||
@ -196,39 +225,6 @@ struct eigrp_interface {
|
||||
struct route_map *routemap[EIGRP_FILTER_MAX];
|
||||
};
|
||||
|
||||
struct eigrp_if_params {
|
||||
DECLARE_IF_PARAM(u_char, passive_interface); /* EIGRP Interface is
|
||||
passive: no sending or
|
||||
receiving (no need to
|
||||
join multicast groups)
|
||||
*/
|
||||
DECLARE_IF_PARAM(u_int32_t, v_hello); /* Hello Interval */
|
||||
DECLARE_IF_PARAM(u_int16_t, v_wait); /* Router Hold Time Interval */
|
||||
DECLARE_IF_PARAM(u_char, type); /* type of interface */
|
||||
DECLARE_IF_PARAM(u_int32_t, bandwidth);
|
||||
DECLARE_IF_PARAM(u_int32_t, delay);
|
||||
DECLARE_IF_PARAM(u_char, reliability);
|
||||
DECLARE_IF_PARAM(u_char, load);
|
||||
|
||||
DECLARE_IF_PARAM(char *,
|
||||
auth_keychain); /* Associated keychain with interface*/
|
||||
DECLARE_IF_PARAM(int, auth_type); /* EIGRP authentication type */
|
||||
};
|
||||
|
||||
enum { MEMBER_ALLROUTERS = 0,
|
||||
MEMBER_MAX,
|
||||
};
|
||||
|
||||
struct eigrp_if_info {
|
||||
struct eigrp_if_params *def_params;
|
||||
struct route_table *params;
|
||||
struct route_table *eifs;
|
||||
unsigned int
|
||||
membership_counts[MEMBER_MAX]; /* multicast group refcnts */
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/* Determines if it is first or last packet
|
||||
* when packet consists of multiple packet
|
||||
* chunks because of many route TLV
|
||||
|
Loading…
Reference in New Issue
Block a user