components/quagga/patches/39-cve-2016-4049.patch
author Brian Utterback <brian.utterback@oracle.com>
Tue, 14 Feb 2017 18:38:21 -0800
branchs11u3-sru
changeset 7672 036be1e2dc00
permissions -rw-r--r--
24928745 problem in SERVICE/QUAGGA
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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