1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-15 07:56:36 +00:00
freebsd-ports/net/openbgpd/files/patch-bgpctl_mrtparser.h
Hiroki Sato 256f3a3dba Update to 5.2.20121014.
Feature safe:	yes
2012-10-13 19:40:42 +00:00

123 lines
3.1 KiB
C

Index: bgpctl/mrtparser.h
===================================================================
RCS file: bgpctl/mrtparser.h
diff -N bgpctl/mrtparser.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ bgpctl/mrtparser.h 13 Oct 2012 18:22:53 -0000 1.1.1.1
@@ -0,0 +1,115 @@
+/* $OpenBSD$ */
+/*
+ * Copyright (c) 2011 Claudio Jeker <claudio@openbsd.org>
+ *
+ * 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.
+ */
+
+struct sockaddr_vpn4 {
+ u_int8_t sv_len;
+ sa_family_t sv_family;
+ u_int8_t sv_labellen;
+ u_int8_t sv_pad;
+ struct in_addr sv_addr;
+ u_int64_t sv_rd;
+ u_int8_t sv_label[21];
+ u_int8_t sv_pad2[3];
+};
+
+#define AF_VPNv4 250 /* XXX high enough to not cause issues */
+
+union mrt_addr {
+ struct sockaddr_in6 sin6;
+ struct sockaddr_in sin;
+ struct sockaddr_vpn4 svpn4;
+ struct sockaddr sa;
+};
+
+/* data structures for the MSG_TABLE_DUMP_V2 format */
+struct mrt_peer_entry {
+ union mrt_addr addr;
+ u_int32_t bgp_id;
+ u_int32_t asnum;
+};
+
+struct mrt_peer {
+ char *view;
+ struct mrt_peer_entry *peers;
+ u_int32_t bgp_id;
+ u_int16_t npeers;
+};
+
+struct mrt_attr {
+ void *attr;
+ size_t attr_len;
+};
+
+struct mrt_rib_entry {
+ void *aspath;
+ struct mrt_attr *attrs;
+ union mrt_addr nexthop;
+ time_t originated;
+ u_int32_t local_pref;
+ u_int32_t med;
+ u_int16_t peer_idx;
+ u_int16_t aspath_len;
+ u_int16_t nattrs;
+ u_int8_t origin;
+};
+
+struct mrt_rib {
+ struct mrt_rib_entry *entries;
+ union mrt_addr prefix;
+ u_int32_t seqnum;
+ u_int16_t nentries;
+ u_int8_t prefixlen;
+};
+
+/* data structures for the BGP4MP MESSAGE and STATE types */
+struct mrt_bgp_state {
+ union mrt_addr src;
+ union mrt_addr dst;
+ u_int32_t src_as;
+ u_int32_t dst_as;
+ u_int16_t old_state;
+ u_int16_t new_state;
+};
+
+struct mrt_bgp_msg {
+ union mrt_addr src;
+ union mrt_addr dst;
+ u_int32_t src_as;
+ u_int32_t dst_as;
+ u_int16_t msg_len;
+ void *msg;
+};
+
+#define MRT_ATTR_ORIGIN 1
+#define MRT_ATTR_ASPATH 2
+#define MRT_ATTR_NEXTHOP 3
+#define MRT_ATTR_MED 4
+#define MRT_ATTR_LOCALPREF 5
+#define MRT_ATTR_MP_REACH_NLRI 14
+#define MRT_ATTR_AS4PATH 17
+#define MRT_ATTR_EXTLEN 0x10
+
+#define MRT_PREFIX_LEN(x) ((((u_int)x) + 7) / 8)
+
+struct mrt_parser {
+ void (*dump)(struct mrt_rib *, struct mrt_peer *, void *);
+ void (*state)(struct mrt_bgp_state *, void *);
+ void (*message)(struct mrt_bgp_msg *, void *);
+ void *arg;
+};
+
+void mrt_parse(int, struct mrt_parser *, int);