CF_KEYWORDS(OSPF, AREA)
+%type <i> idval
+
CF_GRAMMAR
CF_ADDTO(proto, ospf_proto '}')
| ospf_proto ospf_area ';'
;
-ospf_area: AREA IPA {
+ospf_area: AREA idval ';' {
((struct ospf_config *)this_proto)->area = $2;
}
;
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;
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
#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;
};
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