author | Brian Utterback <brian.utterback@oracle.com> |
Tue, 14 Feb 2017 18:38:21 -0800 | |
branch | s11u3-sru |
changeset 7672 | 036be1e2dc00 |
permissions | -rw-r--r-- |
7672
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
1 |
This patch fixes CVE-2016-4049, "bgpd bgp_dump_routes_func() Lets Remote Users |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
2 |
Cause the Target Service to Crash" This bug is fixed in Quagga version |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
3 |
1.1.0 and the patch can be removed after upgrading to a version later than |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
4 |
that. |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
5 |
See: |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
6 |
http://git.savannah.gnu.org/gitweb/?p=quagga.git;a=commit;h=b4e011985232f28d98e4df88c7cb13ee8f95ef46 |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
7 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
8 |
*** bgpd/bgp_dump.c |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
9 |
--- bgpd/bgp_dump.c |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
10 |
*************** bgp_dump_routes_index_table(struct bgp * |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
11 |
*** 271,281 **** |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
12 |
} |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
13 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
14 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
15 |
/* Runs under child process. */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
16 |
static unsigned int |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
17 |
bgp_dump_routes_func (int afi, int first_run, unsigned int seq) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
18 |
{ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
19 |
- struct stream *obuf; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
20 |
struct bgp_info *info; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
21 |
struct bgp_node *rn; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
22 |
struct bgp *bgp; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
23 |
--- 271,364 ---- |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
24 |
} |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
25 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
26 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
27 |
+ static struct bgp_info * |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
28 |
+ bgp_dump_route_node_record (int afi, struct bgp_node *rn, struct bgp_info *info, unsigned int seq) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
29 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
30 |
+ struct stream *obuf; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
31 |
+ size_t sizep; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
32 |
+ size_t endp; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
33 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
34 |
+ obuf = bgp_dump_obuf; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
35 |
+ stream_reset(obuf); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
36 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
37 |
+ /* MRT header */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
38 |
+ if (afi == AFI_IP) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
39 |
+ bgp_dump_header (obuf, MSG_TABLE_DUMP_V2, TABLE_DUMP_V2_RIB_IPV4_UNICAST); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
40 |
+ else if (afi == AFI_IP6) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
41 |
+ bgp_dump_header (obuf, MSG_TABLE_DUMP_V2, TABLE_DUMP_V2_RIB_IPV6_UNICAST); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
42 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
43 |
+ /* Sequence number */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
44 |
+ stream_putl(obuf, seq); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
45 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
46 |
+ /* Prefix length */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
47 |
+ stream_putc (obuf, rn->p.prefixlen); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
48 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
49 |
+ /* Prefix */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
50 |
+ if (afi == AFI_IP) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
51 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
52 |
+ /* We'll dump only the useful bits (those not 0), but have to align on 8 bits */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
53 |
+ stream_write(obuf, (u_char *)&rn->p.u.prefix4, (rn->p.prefixlen+7)/8); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
54 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
55 |
+ else if (afi == AFI_IP6) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
56 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
57 |
+ /* We'll dump only the useful bits (those not 0), but have to align on 8 bits */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
58 |
+ stream_write (obuf, (u_char *)&rn->p.u.prefix6, (rn->p.prefixlen+7)/8); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
59 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
60 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
61 |
+ /* Save where we are now, so we can overwride the entry count later */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
62 |
+ sizep = stream_get_endp(obuf); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
63 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
64 |
+ /* Entry count */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
65 |
+ uint16_t entry_count = 0; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
66 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
67 |
+ /* Entry count, note that this is overwritten later */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
68 |
+ stream_putw(obuf, 0); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
69 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
70 |
+ endp = stream_get_endp(obuf); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
71 |
+ for (; info; info = info->next) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
72 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
73 |
+ size_t cur_endp; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
74 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
75 |
+ /* Peer index */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
76 |
+ stream_putw(obuf, info->peer->table_dump_index); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
77 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
78 |
+ /* Originated */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
79 |
+ #ifdef HAVE_CLOCK_MONOTONIC |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
80 |
+ stream_putl (obuf, time(NULL) - (bgp_clock() - info->uptime)); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
81 |
+ #else |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
82 |
+ stream_putl (obuf, info->uptime); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
83 |
+ #endif /* HAVE_CLOCK_MONOTONIC */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
84 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
85 |
+ /* Dump attribute. */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
86 |
+ /* Skip prefix & AFI/SAFI for MP_NLRI */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
87 |
+ bgp_dump_routes_attr (obuf, info->attr, &rn->p); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
88 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
89 |
+ cur_endp = stream_get_endp(obuf); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
90 |
+ if (cur_endp > BGP_MAX_PACKET_SIZE + BGP_DUMP_MSG_HEADER |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
91 |
+ + BGP_DUMP_HEADER_SIZE) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
92 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
93 |
+ stream_set_endp(obuf, endp); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
94 |
+ break; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
95 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
96 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
97 |
+ entry_count++; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
98 |
+ endp = cur_endp; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
99 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
100 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
101 |
+ /* Overwrite the entry count, now that we know the right number */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
102 |
+ stream_putw_at (obuf, sizep, entry_count); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
103 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
104 |
+ bgp_dump_set_size(obuf, MSG_TABLE_DUMP_V2); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
105 |
+ fwrite (STREAM_DATA (obuf), stream_get_endp (obuf), 1, bgp_dump_routes.fp); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
106 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
107 |
+ return info; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
108 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
109 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
110 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
111 |
/* Runs under child process. */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
112 |
static unsigned int |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
113 |
bgp_dump_routes_func (int afi, int first_run, unsigned int seq) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
114 |
{ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
115 |
struct bgp_info *info; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
116 |
struct bgp_node *rn; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
117 |
struct bgp *bgp; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
118 |
*************** bgp_dump_routes_func (int afi, int first |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
119 |
*** 294,380 **** |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
120 |
if(first_run) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
121 |
bgp_dump_routes_index_table(bgp); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
122 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
123 |
- obuf = bgp_dump_obuf; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
124 |
- stream_reset(obuf); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
125 |
- |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
126 |
/* Walk down each BGP route. */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
127 |
table = bgp->rib[afi][SAFI_UNICAST]; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
128 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
129 |
for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn)) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
130 |
{ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
131 |
! if(!rn->info) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
132 |
! continue; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
133 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
134 |
! stream_reset(obuf); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
135 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
136 |
! /* MRT header */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
137 |
! if (afi == AFI_IP) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
138 |
! { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
139 |
! bgp_dump_header (obuf, MSG_TABLE_DUMP_V2, TABLE_DUMP_V2_RIB_IPV4_UNICAST); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
140 |
! } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
141 |
! #ifdef HAVE_IPV6 |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
142 |
! else if (afi == AFI_IP6) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
143 |
! { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
144 |
! bgp_dump_header (obuf, MSG_TABLE_DUMP_V2, TABLE_DUMP_V2_RIB_IPV6_UNICAST); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
145 |
! } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
146 |
! #endif /* HAVE_IPV6 */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
147 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
148 |
! /* Sequence number */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
149 |
! stream_putl(obuf, seq); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
150 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
151 |
! /* Prefix length */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
152 |
! stream_putc (obuf, rn->p.prefixlen); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
153 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
154 |
! /* Prefix */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
155 |
! if (afi == AFI_IP) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
156 |
! { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
157 |
! /* We'll dump only the useful bits (those not 0), but have to align on 8 bits */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
158 |
! stream_write(obuf, (u_char *)&rn->p.u.prefix4, (rn->p.prefixlen+7)/8); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
159 |
! } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
160 |
! #ifdef HAVE_IPV6 |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
161 |
! else if (afi == AFI_IP6) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
162 |
! { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
163 |
! /* We'll dump only the useful bits (those not 0), but have to align on 8 bits */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
164 |
! stream_write (obuf, (u_char *)&rn->p.u.prefix6, (rn->p.prefixlen+7)/8); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
165 |
! } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
166 |
! #endif /* HAVE_IPV6 */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
167 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
168 |
! /* Save where we are now, so we can overwride the entry count later */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
169 |
! int sizep = stream_get_endp(obuf); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
170 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
171 |
! /* Entry count */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
172 |
! uint16_t entry_count = 0; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
173 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
174 |
! /* Entry count, note that this is overwritten later */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
175 |
! stream_putw(obuf, 0); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
176 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
177 |
! for (info = rn->info; info; info = info->next) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
178 |
! { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
179 |
! entry_count++; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
180 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
181 |
! /* Peer index */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
182 |
! stream_putw(obuf, info->peer->table_dump_index); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
183 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
184 |
! /* Originated */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
185 |
! #ifdef HAVE_CLOCK_MONOTONIC |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
186 |
! stream_putl (obuf, time(NULL) - (bgp_clock() - info->uptime)); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
187 |
! #else |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
188 |
! stream_putl (obuf, info->uptime); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
189 |
! #endif /* HAVE_CLOCK_MONOTONIC */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
190 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
191 |
! /* Dump attribute. */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
192 |
! /* Skip prefix & AFI/SAFI for MP_NLRI */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
193 |
! bgp_dump_routes_attr (obuf, info->attr, &rn->p); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
194 |
! } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
195 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
196 |
! /* Overwrite the entry count, now that we know the right number */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
197 |
! stream_putw_at (obuf, sizep, entry_count); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
198 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
199 |
! seq++; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
200 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
201 |
! bgp_dump_set_size(obuf, MSG_TABLE_DUMP_V2); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
202 |
! fwrite (STREAM_DATA (obuf), stream_get_endp (obuf), 1, bgp_dump_routes.fp); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
203 |
! |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
204 |
} |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
205 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
206 |
fflush (bgp_dump_routes.fp); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
207 |
--- 377,393 ---- |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
208 |
if(first_run) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
209 |
bgp_dump_routes_index_table(bgp); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
210 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
211 |
/* Walk down each BGP route. */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
212 |
table = bgp->rib[afi][SAFI_UNICAST]; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
213 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
214 |
for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn)) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
215 |
{ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
216 |
! info = rn->info; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
217 |
! while (info) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
218 |
! { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
219 |
! info = bgp_dump_route_node_record(afi, rn, info, seq); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
220 |
! seq++; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
221 |
! } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
222 |
} |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
223 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
224 |
fflush (bgp_dump_routes.fp); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
225 |
*************** bgp_dump_init (void) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
226 |
*** 854,861 **** |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
227 |
memset (&bgp_dump_updates, 0, sizeof (struct bgp_dump)); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
228 |
memset (&bgp_dump_routes, 0, sizeof (struct bgp_dump)); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
229 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
230 |
! bgp_dump_obuf = stream_new (BGP_MAX_PACKET_SIZE + BGP_DUMP_MSG_HEADER |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
231 |
! + BGP_DUMP_HEADER_SIZE); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
232 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
233 |
install_node (&bgp_dump_node, config_write_bgp_dump); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
234 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
235 |
--- 867,874 ---- |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
236 |
memset (&bgp_dump_updates, 0, sizeof (struct bgp_dump)); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
237 |
memset (&bgp_dump_routes, 0, sizeof (struct bgp_dump)); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
238 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
239 |
! bgp_dump_obuf = stream_new ((BGP_MAX_PACKET_SIZE << 1) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
240 |
! + BGP_DUMP_MSG_HEADER + BGP_DUMP_HEADER_SIZE); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
241 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
242 |
install_node (&bgp_dump_node, config_write_bgp_dump); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
243 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
244 |
*** lib/stream.c |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
245 |
--- lib/stream.c |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
246 |
*************** stream_set_getp (struct stream *s, size_ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
247 |
*** 214,219 **** |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
248 |
--- 214,243 ---- |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
249 |
s->getp = pos; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
250 |
} |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
251 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
252 |
+ void |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
253 |
+ stream_set_endp (struct stream *s, size_t pos) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
254 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
255 |
+ STREAM_VERIFY_SANE(s); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
256 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
257 |
+ if (!ENDP_VALID(s, pos)) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
258 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
259 |
+ STREAM_BOUND_WARN (s, "set endp"); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
260 |
+ return; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
261 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
262 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
263 |
+ /* |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
264 |
+ * Make sure the current read pointer is not beyond the new endp. |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
265 |
+ */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
266 |
+ if (s->getp > pos) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
267 |
+ { |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
268 |
+ STREAM_BOUND_WARN(s, "set endp"); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
269 |
+ return; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
270 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
271 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
272 |
+ s->endp = pos; |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
273 |
+ STREAM_VERIFY_SANE(s); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
274 |
+ } |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
275 |
+ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
276 |
/* Forward pointer. */ |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
277 |
void |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
278 |
stream_forward_getp (struct stream *s, size_t size) |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
279 |
*** lib/stream.h |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
280 |
--- lib/stream.h |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
281 |
*************** extern size_t stream_get_size (struct st |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
282 |
*** 146,151 **** |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
283 |
--- 146,152 ---- |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
284 |
extern u_char *stream_get_data (struct stream *); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
285 |
|
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
286 |
extern void stream_set_getp (struct stream *, size_t); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
287 |
+ extern void stream_set_endp (struct stream *, size_t); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
288 |
extern void stream_forward_getp (struct stream *, size_t); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
289 |
extern void stream_forward_endp (struct stream *, size_t); |
036be1e2dc00
24928745 problem in SERVICE/QUAGGA
Brian Utterback <brian.utterback@oracle.com>
parents:
diff
changeset
|
290 |