summaryrefslogtreecommitdiff
path: root/usr.sbin/ospfd/ospf.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ospfd/ospf.h')
-rw-r--r--usr.sbin/ospfd/ospf.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/usr.sbin/ospfd/ospf.h b/usr.sbin/ospfd/ospf.h
new file mode 100644
index 00000000000..7886ffeee23
--- /dev/null
+++ b/usr.sbin/ospfd/ospf.h
@@ -0,0 +1,203 @@
+/* $OpenBSD: ospf.h,v 1.1 2005/01/28 14:05:40 claudio Exp $ */
+
+/*
+ * Copyright (c) 2004, 2005 Esben Norby <esben.norby@ericsson.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* OSPF protocol definitions */
+
+#ifndef _OSPF_H_
+#define _OSPF_H_
+
+#include <netinet/in.h>
+#include <stdbool.h>
+
+/* misc */
+#define OSPF_VERSION 2
+#define IPPROTO_OSPF 89
+#define AllSPFRouters "224.0.0.5"
+#define AllDRouters "224.0.0.6"
+
+#define PACKET_HDR 100 /* XXX used to calculate the IP payload */
+
+#define DEFAULT_METRIC 1
+#define MIN_METRIC 1
+#define MAX_METRIC 65535
+
+#define DEFAULT_PRIORITY 0 /* XXX force to 0 for now */
+#define MIN_PRIORITY 0
+#define MAX_PRIORITY 255
+
+#define DEFAULT_HELLO_INTERVAL 10
+#define MIN_HELLO_INTERVAL 1
+#define MAX_HELLO_INTERVAL 65535
+
+#define DEFAULT_RTR_DEAD_TIME 40
+#define MIN_RTR_DEAD_TIME 2
+#define MAX_RTR_DEAD_TIME 2147483647
+
+#define DEFAULT_RXMT_INTERVAL 5
+#define MIN_RXMT_INTERVAL 5
+#define MAX_RXMT_INTERVAL 3600
+
+#define DEFAULT_TRANSIT_DELAY 1
+#define MIN_TRANSIT_DELAY 1
+#define MAX_TRANSIT_DELAY 3600
+
+#define DEFAULT_ADJ_TMOUT 60 /* XXX sane value? */
+
+/* OSPF compatibility flags */
+#define OSPF_OPTION_E 0x02
+#define OSPF_OPTION_MC 0x04
+#define OSPF_OPTION_NP 0x08
+#define OSPF_OPTION_EA 0x10
+#define OSPF_OPTION_DC 0x20
+
+/* OSPF packet types */
+#define PACKET_TYPE_HELLO 1
+#define PACKET_TYPE_DD 2
+#define PACKET_TYPE_LS_REQUEST 3
+#define PACKET_TYPE_LS_UPDATE 4
+#define PACKET_TYPE_LS_ACK 5
+
+/* OSPF auth types */
+#define AUTH_TYPE_NONE 0
+#define AUTH_TYPE_SIMPLE 1
+#define AUTH_TYPE_CRYPT 2
+
+#define MIN_AUTHTYPE 0
+#define MAX_AUTHTYPE 2
+
+/* LSA */
+#define LS_REFRESH_TIME 1800
+#define MIN_LS_INTERVAL 5
+#define MIN_LS_ARRIVAL 1
+#define DEFAULT_AGE 0
+#define MAX_AGE 3600
+#define CHECK_AGE 300
+#define MAX_AGE_DIFF 900
+#define LS_INFINITY 0xffffff
+#define INIT_SEQ_NUM 0x80000001
+#define MAX_SEQ_NUM 0x7fffffff
+
+/* OSPF header */
+struct ospf_hdr {
+ u_int8_t version;
+ u_int8_t type;
+ u_int16_t len;
+ u_int32_t rtr_id;
+ u_int32_t area_id;
+ u_int16_t chksum;
+ u_int16_t auth_type;
+ union {
+ char simple[8];
+ u_int64_t crypt;
+ } auth_key;
+};
+
+/* Hello header (type 1) */
+struct hello_hdr {
+ u_int32_t mask;
+ u_int16_t hello_interval;
+ u_int8_t opts;
+ u_int8_t rtr_priority;
+ u_int32_t rtr_dead_interval;
+ u_int32_t d_rtr;
+ u_int32_t bd_rtr;
+};
+
+/* Database Description header (type 2) */
+struct db_dscrp_hdr {
+ u_int16_t iface_mtu;
+ u_int8_t opts;
+ u_int8_t bits;
+ u_int32_t dd_seq_num;
+};
+
+#define OSPF_DBD_MS 0x01
+#define OSPF_DBD_M 0x02
+#define OSPF_DBD_I 0x04
+
+/* Link State Request header (type 3) */
+struct ls_req_hdr {
+ u_int32_t type;
+ u_int32_t ls_id;
+ u_int32_t adv_rtr;
+};
+
+/* Link State Update header (type 4) */
+struct ls_upd_hdr {
+ u_int32_t num_lsa;
+};
+
+#define LSA_TYPE_ROUTER 1
+#define LSA_TYPE_NETWORK 2
+#define LSA_TYPE_SUM_NETWORK 3
+#define LSA_TYPE_SUM_ROUTER 4
+#define LSA_TYPE_EXTERNAL 5
+
+#define LINK_TYPE_POINTTOPOINT 1
+#define LINK_TYPE_TRANSIT_NET 2
+#define LINK_TYPE_STUB_NET 3
+#define LINK_TYPE_VIRTUAL 4
+
+/* LSA headers */
+struct lsa_rtr {
+ u_int8_t flags;
+ u_int8_t dummy;
+ u_int16_t nlinks;
+};
+
+struct lsa_rtr_link {
+ u_int32_t id;
+ u_int32_t data;
+ u_int8_t type;
+ u_int8_t num_tos;
+ u_int16_t metric;
+};
+
+struct lsa_net {
+ u_int32_t mask;
+ u_int32_t att_rtr[1];
+};
+
+struct lsa_sum {
+ u_int32_t mask;
+ u_int32_t metric; /* only lower 24 bit */
+};
+
+struct lsa_hdr {
+ u_int16_t age;
+ u_int8_t opts;
+ u_int8_t type;
+ u_int32_t ls_id;
+ u_int32_t adv_rtr;
+ int32_t seq_num;
+ u_int16_t ls_chksum;
+ u_int16_t len;
+};
+
+#define LS_CKSUM_OFFSET ((u_int16_t)(&((struct lsa_hdr *)0)->ls_chksum))
+
+struct lsa {
+ struct lsa_hdr hdr;
+ union {
+ struct lsa_rtr rtr;
+ struct lsa_net net;
+ struct lsa_sum sum;
+ } data;
+};
+
+#endif /* !_OSPF_H_ */