summaryrefslogtreecommitdiff
path: root/proto/ospf
diff options
context:
space:
mode:
Diffstat (limited to 'proto/ospf')
-rw-r--r--proto/ospf/config.Y4
-rw-r--r--proto/ospf/ospf.c10
-rw-r--r--proto/ospf/ospf.h22
3 files changed, 24 insertions, 12 deletions
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 <i> 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