diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y index 3f416237..9840def0 100644 --- a/proto/ospf/config.Y +++ b/proto/ospf/config.Y @@ -14,6 +14,8 @@ CF_DECLS CF_KEYWORDS(OSPF, AREA) +%type idval + CF_GRAMMAR CF_ADDTO(proto, ospf_proto '}') @@ -29,7 +31,7 @@ ospf_proto: | ospf_proto ospf_area ';' ; -ospf_area: AREA IPA { +ospf_area: AREA idval ';' { ((struct ospf_config *)this_proto)->area = $2; } ; diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c index 79d29a99..fbbc68d7 100644 --- a/proto/ospf/ospf.c +++ b/proto/ospf/ospf.c @@ -91,7 +91,7 @@ byte ospf_iface_clasify(struct iface *ifa) { if((ifa->flags & (IF_MULTIACCESS|IF_MULTICAST))== - IF_MULTIACCESS|IF_MULTICAST) return OSPF_IM_MULTICAST; + IF_MULTIACCESS|IF_MULTICAST) return OSPF_IM_BROADCAST; if((ifa->flags & (IF_MULTIACCESS|IF_MULTICAST))== IF_MULTIACCESS) return OSPF_IM_NBMA; return OSPF_IM_PTP; @@ -112,9 +112,11 @@ ospf_iface_default(struct ospf_iface *ifa) ifa->autype=0; for(i=0;i<8;i++) ifa->aukey[i]=0; ifa->options=0; - ifa->dr=ipa_from_u32(0x00000000); - ifa->bdr=ipa_from_u32(0x00000000); - ifa->mode=ospf_iface_clasify(ifa->iface); + ifa->drip=ipa_from_u32(0x00000000); + ifa->drid=0; + ifa->bdrip=ipa_from_u32(0x00000000); + ifa->bdrid=0; + ifa->type=ospf_iface_clasify(ifa->iface); } void diff --git a/proto/ospf/ospf.h b/proto/ospf/ospf.h index 44a8e79f..2965d8e7 100644 --- a/proto/ospf/ospf.h +++ b/proto/ospf/ospf.h @@ -10,12 +10,18 @@ #define _BIRD_OSPF_H_ #define OSPF_PROTO 89 +#ifndef IPV6 #define AllSPFRouters ipa_from_u32(0xe0000005) /* 224.0.0.5 */ #define AllDRouters ipa_from_u32(0xe0000006) /* 224.0.0.6 */ +#else +#error Multicast address not defined +#endif + struct ospf_config { struct proto_config c; - ip_addr area; /* Area ID !!! This is wrong !!! */ + u32 area; /* Area ID !!! This is wrong !!! + * Should respect interface */ list iface_list; }; @@ -35,12 +41,14 @@ struct ospf_iface { u16 autype; u8 aukey[8]; u8 options; - ip_addr dr; /* Designated router */ - ip_addr bdr; /* Backup DR */ - byte mode; -#define OSPF_IM_MULTICAST 0 -#define OSPF_IM_PTP 1 -#define OSPF_IM_NBMA 2 + ip_addr drip; /* Designated router */ + u32 drid; + ip_addr bdrip; /* Backup DR */ + u32 bdrid; + int type; +#define OSPF_IM_BROADCAST 0 +#define OSPF_IM_NBMA 1 +#define OSPF_IM_PTP 2 /* Default values for interface parameters */ #define COST_D 10