diff options
author | Claudio Jeker <claudio@cvs.openbsd.org> | 2005-01-28 14:05:41 +0000 |
---|---|---|
committer | Claudio Jeker <claudio@cvs.openbsd.org> | 2005-01-28 14:05:41 +0000 |
commit | ccc5f735cc0a287cd117c41e690e7bab855d35df (patch) | |
tree | 73ce6ba377048b4358b66dcd68c700d22eea33eb /usr.sbin/ospfd/ospf.h | |
parent | 0dcb4b3a6285e3cc2e96ba56db5f830a086696f7 (diff) |
Welcome ospfd
started by Esben Norby some time ago by using the imsg/three process framework
of bgpd. He implemented the basic concept plus the ospf finite state machines.
Later I joined and helped him cleanup, debug and extend his work.
Right now it is not particularly useful, major parts are still missing but is
imported to allow more people to work on it.
status:
The basic protocol works for broadcast networks and the LS database is
synchronized and updated. It is not possible to be DR or BDR on a network
and other interface types like point-to-point are not yet supported.
The shortest path tree is not calculated and so no routing information is
exchanged with the kernel FIB.
Not yet connected to the builds.
OK henning@
Diffstat (limited to 'usr.sbin/ospfd/ospf.h')
-rw-r--r-- | usr.sbin/ospfd/ospf.h | 203 |
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_ */ |