mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-15 07:56:36 +00:00
256f3a3dba
Feature safe: yes
123 lines
3.1 KiB
C
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);
|