View | Details | Raw Unified | Return to bug 156332 | Differences between
and this patch

Collapse All | Expand All

(-)/mnt/work/ports/net/quagga/Makefile (-2 / +1 lines)
Lines 6-13 Link Here
6
#
6
#
7
7
8
PORTNAME=	quagga
8
PORTNAME=	quagga
9
PORTVERSION=	0.99.17
9
PORTVERSION=	0.99.20
10
PORTREVISION=	9
11
CATEGORIES=	net ipv6
10
CATEGORIES=	net ipv6
12
MASTER_SITES=	http://quagga.net/download/ \
11
MASTER_SITES=	http://quagga.net/download/ \
13
		http://www.ru.quagga.net/download/ \
12
		http://www.ru.quagga.net/download/ \
(-)/mnt/work/ports/net/quagga/distinfo (-2 / +2 lines)
Lines 1-2 Link Here
1
SHA256 (quagga-0.99.17.tar.gz) = 1d77df121a334e9504b45e489ee7ce35bf478e27d33cd2793a23280b59d9efd4
1
SHA256 (quagga-0.99.20.tar.gz) = b7a98cc6b022bb0cb405557b3d920cf513150f64384dbd0a2248b5bd248df58b
2
SIZE (quagga-0.99.17.tar.gz) = 2202151
2
SIZE (quagga-0.99.20.tar.gz) = 2232520
(-)/mnt/work/ports/net/quagga/files/patch-CVE-2010-1674 (-67 lines)
Lines 1-67 Link Here
1
commit ca0f29480d22837f99b9ac42cf64a8d656bfcac5
2
Author: Paul Jakma <paul@quagga.net>
3
Date:   Sun Dec 5 17:17:26 2010 +0000
4
5
    bgpd/security: CVE-2010-1674 Fix crash due to extended-community parser error
6
    
7
    * bgp_attr.c: (bgp_attr_ext_communities) Certain extended-community attrs
8
      can leave attr->flag indicating ext-community is present, even though no
9
      extended-community object has been attached to the attr structure.  Thus a
10
      null-pointer dereference can occur later.
11
      (bgp_attr_community) No bug fixed here, but tidy up flow so it has same
12
      form as previous.
13
    
14
      Problem and fix thanks to anonymous reporter.
15
16
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
17
index ae0dc88..c6fd3a5 100644
18
--- bgpd/bgp_attr.c
19
+++ bgpd/bgp_attr.c
20
@@ -1235,13 +1235,16 @@ bgp_attr_community (struct peer *peer, bgp_size_t length,
21
       attr->community = NULL;
22
       return 0;
23
     }
24
-  else
25
-    {
26
-      attr->community = 
27
-        community_parse ((u_int32_t *)stream_pnt (peer->ibuf), length);
28
-      stream_forward_getp (peer->ibuf, length);
29
-    }
30
+  
31
+  attr->community =
32
+    community_parse ((u_int32_t *)stream_pnt (peer->ibuf), length);
33
+  
34
+  /* XXX: fix community_parse to use stream API and remove this */
35
+  stream_forward_getp (peer->ibuf, length);
36
 
37
+  if (!attr->community)
38
+    return -1;
39
+  
40
   attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_COMMUNITIES);
41
 
42
   return 0;
43
@@ -1478,13 +1481,18 @@ bgp_attr_ext_communities (struct peer *peer, bgp_size_t length,
44
     {
45
       if (attr->extra)
46
         attr->extra->ecommunity = NULL;
47
+      /* Empty extcomm doesn't seem to be invalid per se */
48
+      return 0;
49
     }
50
-  else
51
-    {
52
-      (bgp_attr_extra_get (attr))->ecommunity = 
53
-        ecommunity_parse ((u_int8_t *)stream_pnt (peer->ibuf), length);
54
-      stream_forward_getp (peer->ibuf, length);
55
-    }
56
+
57
+  (bgp_attr_extra_get (attr))->ecommunity =
58
+    ecommunity_parse ((u_int8_t *)stream_pnt (peer->ibuf), length);
59
+  /* XXX: fix ecommunity_parse to use stream API */
60
+  stream_forward_getp (peer->ibuf, length);
61
+  
62
+  if (!attr->extra->ecommunity)
63
+    return -1;
64
+  
65
   attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_EXT_COMMUNITIES);
66
 
67
   return 0;
(-)/mnt/work/ports/net/quagga/files/patch-CVE-2010-1675 (-1296 lines)
Lines 1-1296 Link Here
1
commit 4fbe0484edc47f10852da879125c30504b4f69ad
2
Author: Paul Jakma <paul@quagga.net>
3
Date:   Sun Dec 5 20:28:02 2010 +0000
4
5
    bgpd: Remove AS Path limit/TTL functionality
6
    
7
    * draft-ietf-idr-as-pathlimit doesn't seem to have gone anywhere, and its
8
      author does not think it will make progress in IDR. Remove all support
9
      introduced for it, but leave stubs for the commands to avoid breaking
10
      any configurations.
11
    
12
      Basically reverts cecab5e9725792e60a5e4b473e238a14cd85815d.
13
14
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
15
index c6fd3a5..aa6fa61 100644
16
--- bgpd/bgp_attr.c
17
+++ bgpd/bgp_attr.c
18
@@ -359,11 +359,6 @@ attrhash_key_make (void *p)
19
   key += attr->nexthop.s_addr;
20
   key += attr->med;
21
   key += attr->local_pref;
22
-  if (attr->pathlimit.as)
23
-    {
24
-      key += attr->pathlimit.ttl;
25
-      key += attr->pathlimit.as;
26
-    }
27
   
28
   if (attr->extra)
29
     {
30
@@ -415,9 +410,7 @@ attrhash_cmp (const void *p1, const void *p2)
31
       && attr1->aspath == attr2->aspath
32
       && attr1->community == attr2->community
33
       && attr1->med == attr2->med
34
-      && attr1->local_pref == attr2->local_pref
35
-      && attr1->pathlimit.ttl == attr2->pathlimit.ttl
36
-      && attr1->pathlimit.as == attr2->pathlimit.as)
37
+      && attr1->local_pref == attr2->local_pref)
38
     {
39
       const struct attr_extra *ae1 = attr1->extra;
40
       const struct attr_extra *ae2 = attr2->extra;
41
@@ -704,43 +697,6 @@ bgp_attr_flush (struct attr *attr)
42
     }
43
 }
44
 
45
-/* Parse AS_PATHLIMIT attribute in an UPDATE */
46
-static int
47
-bgp_attr_aspathlimit (struct peer *peer, bgp_size_t length,
48
-                      struct attr *attr, u_char flag, u_char *startp)
49
-{
50
-  bgp_size_t total;
51
-  
52
-  total = length + (CHECK_FLAG (flag, BGP_ATTR_FLAG_EXTLEN) ? 4 : 3);
53
-  
54
-  if (!CHECK_FLAG(flag, BGP_ATTR_FLAG_TRANS)
55
-       || !CHECK_FLAG(flag, BGP_ATTR_FLAG_OPTIONAL))
56
-    {
57
-      zlog (peer->log, LOG_ERR, 
58
-	    "AS-Pathlimit attribute flag isn't transitive %d", flag);
59
-      bgp_notify_send_with_data (peer, 
60
-				 BGP_NOTIFY_UPDATE_ERR, 
61
-				 BGP_NOTIFY_UPDATE_ATTR_FLAG_ERR,
62
-				 startp, total);
63
-      return -1;
64
-    }
65
-  
66
-  if (length != 5)
67
-    {
68
-      zlog (peer->log, LOG_ERR, 
69
-	    "AS-Pathlimit length, %u, is not 5", length);
70
-      bgp_notify_send_with_data (peer, 
71
-				 BGP_NOTIFY_UPDATE_ERR, 
72
-				 BGP_NOTIFY_UPDATE_ATTR_FLAG_ERR,
73
-				 startp, total);
74
-      return -1;
75
-    }
76
-  
77
-  attr->pathlimit.ttl = stream_getc (BGP_INPUT(peer));
78
-  attr->pathlimit.as = stream_getl (BGP_INPUT(peer));
79
-  attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_AS_PATHLIMIT);
80
-  return 0;
81
-}
82
 /* Get origin attribute of the update message. */
83
 static int
84
 bgp_attr_origin (struct peer *peer, bgp_size_t length, 
85
@@ -1717,9 +1673,6 @@ bgp_attr_parse (struct peer *peer, struct attr *attr, bgp_size_t size,
86
 	case BGP_ATTR_EXT_COMMUNITIES:
87
 	  ret = bgp_attr_ext_communities (peer, length, attr, flag);
88
 	  break;
89
-        case BGP_ATTR_AS_PATHLIMIT:
90
-          ret = bgp_attr_aspathlimit (peer, length, attr, flag, startp);
91
-          break;
92
 	default:
93
 	  ret = bgp_attr_unknown (peer, attr, flag, type, length, startp);
94
 	  break;
95
@@ -2274,24 +2227,6 @@ bgp_packet_attribute (struct bgp *bgp, struct peer *peer,
96
       stream_put_ipv4 (s, attr->extra->aggregator_addr.s_addr);
97
     }
98
   
99
-  /* AS-Pathlimit */
100
-  if (attr->pathlimit.ttl)
101
-    {
102
-      u_int32_t as = attr->pathlimit.as;
103
-      
104
-      /* should already have been done in announce_check(), 
105
-       * but just in case..
106
-       */
107
-      if (!as)
108
-        as = peer->local_as;
109
-      
110
-      stream_putc (s, BGP_ATTR_FLAG_OPTIONAL|BGP_ATTR_FLAG_TRANS);
111
-      stream_putc (s, BGP_ATTR_AS_PATHLIMIT);
112
-      stream_putc (s, 5);
113
-      stream_putc (s, attr->pathlimit.ttl);
114
-      stream_putl (s, as);
115
-    }
116
-  
117
   /* Unknown transit attribute. */
118
   if (attr->extra && attr->extra->transit)
119
     stream_put (s, attr->extra->transit->val, attr->extra->transit->length);
120
@@ -2503,16 +2438,6 @@ bgp_dump_routes_attr (struct stream *s, struct attr *attr,
121
     }
122
 #endif /* HAVE_IPV6 */
123
 
124
-  /* AS-Pathlimit */
125
-  if (attr->flag & ATTR_FLAG_BIT (BGP_ATTR_AS_PATHLIMIT))
126
-    {
127
-      stream_putc (s, BGP_ATTR_FLAG_OPTIONAL|BGP_ATTR_FLAG_TRANS);
128
-      stream_putc (s, BGP_ATTR_AS_PATHLIMIT);
129
-      stream_putc (s, 5);
130
-      stream_putc (s, attr->pathlimit.ttl);
131
-      stream_putl (s, attr->pathlimit.as);
132
-    }
133
-
134
   /* Return total size of attribute. */
135
   len = stream_get_endp (s) - cp - 2;
136
   stream_putw_at (s, cp, len);
137
diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
138
index ed8753b..af9dcf5 100644
139
--- bgpd/bgp_attr.h
140
+++ bgpd/bgp_attr.h
141
@@ -110,12 +110,6 @@ struct attr
142
   u_int32_t med;
143
   u_int32_t local_pref;
144
   
145
-  /* AS-Pathlimit */
146
-  struct {
147
-    u_int32_t as;
148
-    u_char ttl;
149
-  } pathlimit;
150
-  
151
   /* Path origin attribute */
152
   u_char origin;
153
 };
154
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
155
index 1cfc451..75a59cb 100644
156
--- bgpd/bgp_route.c
157
+++ bgpd/bgp_route.c
158
@@ -910,19 +910,6 @@ bgp_announce_check (struct bgp_info *ri, struct peer *peer, struct prefix *p,
159
 	}
160
     }
161
   
162
-  /* AS-Pathlimit check */
163
-  if (ri->attr->pathlimit.ttl && peer_sort (peer) == BGP_PEER_EBGP)
164
-    /* Our ASN has not yet been pre-pended, that's done in packet_attribute
165
-     * on output. Hence the test here is for >=.
166
-     */
167
-    if (aspath_count_hops (ri->attr->aspath) >= ri->attr->pathlimit.ttl)
168
-      {
169
-        if (BGP_DEBUG (filter, FILTER))
170
-          zlog_info ("%s [Update:SEND] suppressed, AS-Pathlimit TTL %u exceeded",
171
-                     peer->host, ri->attr->pathlimit.ttl);
172
-        return 0;
173
-      }
174
-  
175
   /* For modify attribute, copy it to temporary structure. */
176
   bgp_attr_dup (attr, ri->attr);
177
   
178
@@ -1027,39 +1014,6 @@ bgp_announce_check (struct bgp_info *ri, struct peer *peer, struct prefix *p,
179
     }
180
 #endif /* HAVE_IPV6 */
181
 
182
-  /* AS-Pathlimit: Check ASN for private/confed */
183
-  if (attr->pathlimit.ttl)
184
-    {
185
-      /* locally originated update */
186
-      if (!attr->pathlimit.as)
187
-        attr->pathlimit.as = peer->local_as;
188
-      
189
-      /* if the AS_PATHLIMIT attribute is attached to a prefix by a
190
-         member of a confederation, then when the prefix is advertised outside
191
-         of the confederation boundary, then the AS number of the
192
-         confederation member inside of the AS_PATHLIMIT attribute should be
193
-         replaced by the confederation's AS number. */
194
-      if (peer_sort (from) == BGP_PEER_CONFED 
195
-          && peer_sort (peer) != BGP_PEER_CONFED)
196
-        attr->pathlimit.as = peer->local_as;
197
-
198
-      /* Private ASN should be updated whenever announcement leaves
199
-       * private space. This is deliberately done after simple confed
200
-       * based update..
201
-       */
202
-      if (attr->pathlimit.as >= BGP_PRIVATE_AS_MIN
203
-          && attr->pathlimit.as <= BGP_PRIVATE_AS_MAX)
204
-        {
205
-          if (peer->local_as < BGP_PRIVATE_AS_MIN 
206
-              || peer->local_as > BGP_PRIVATE_AS_MAX)
207
-            attr->pathlimit.as = peer->local_as;
208
-          /* Ours is private, try using theirs.. */
209
-          else if (peer->as < BGP_PRIVATE_AS_MIN
210
-                   || peer->local_as > BGP_PRIVATE_AS_MAX)
211
-            attr->pathlimit.as = peer->as;
212
-        }
213
-    }
214
-  
215
   /* If this is EBGP peer and remove-private-AS is set.  */
216
   if (peer_sort (peer) == BGP_PEER_EBGP
217
       && peer_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS)
218
@@ -3239,14 +3193,6 @@ bgp_static_update_rsclient (struct peer *rsclient, struct prefix *p,
219
   attr.med = bgp_static->igpmetric;
220
   attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_MULTI_EXIT_DISC);
221
   
222
-  if (bgp_static->ttl)
223
-    {
224
-      attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_AS_PATHLIMIT);
225
-      attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_ATOMIC_AGGREGATE);
226
-      attr.pathlimit.as = 0;
227
-      attr.pathlimit.ttl = bgp_static->ttl;
228
-    }
229
-  
230
   if (bgp_static->atomic)
231
     attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_ATOMIC_AGGREGATE);
232
   
233
@@ -3395,14 +3341,6 @@ bgp_static_update_main (struct bgp *bgp, struct prefix *p,
234
   attr.med = bgp_static->igpmetric;
235
   attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_MULTI_EXIT_DISC);
236
 
237
-  if (bgp_static->ttl)
238
-    {
239
-      attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_AS_PATHLIMIT);
240
-      attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_ATOMIC_AGGREGATE);
241
-      attr.pathlimit.as = 0;
242
-      attr.pathlimit.ttl = bgp_static->ttl;
243
-    }
244
-
245
   if (bgp_static->atomic)
246
     attr.flag |= ATTR_FLAG_BIT (BGP_ATTR_ATOMIC_AGGREGATE);
247
 
248
@@ -3626,44 +3564,17 @@ bgp_static_withdraw_vpnv4 (struct bgp *bgp, struct prefix *p, afi_t afi,
249
   bgp_unlock_node (rn);
250
 }
251
 
252
-static void
253
-bgp_pathlimit_update_parents (struct bgp *bgp, struct bgp_node *rn,
254
-                              int ttl_edge)
255
-{
256
-  struct bgp_node *parent = rn;
257
-  struct bgp_static *sp;
258
-  
259
-  /* Existing static changed TTL, search parents and adjust their atomic */
260
-  while ((parent = parent->parent))
261
-    if ((sp = parent->info))
262
-      {
263
-        int sp_level = (sp->atomic ? 1 : 0);
264
-        ttl_edge ? sp->atomic++ : sp->atomic--;
265
-        
266
-        /* did we change state of parent whether atomic is set or not? */
267
-        if (sp_level != (sp->atomic ? 1 : 0))
268
-          {
269
-            bgp_static_update (bgp, &parent->p, sp,
270
-                               rn->table->afi, rn->table->safi);
271
-          }
272
-      }
273
-}
274
-
275
 /* Configure static BGP network.  When user don't run zebra, static
276
    route should be installed as valid.  */
277
 static int
278
 bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str, 
279
-                u_int16_t afi, u_char safi, const char *rmap, int backdoor,
280
-                u_char ttl)
281
+                u_int16_t afi, u_char safi, const char *rmap, int backdoor)
282
 {
283
   int ret;
284
   struct prefix p;
285
   struct bgp_static *bgp_static;
286
   struct bgp_node *rn;
287
   u_char need_update = 0;
288
-  u_char ttl_change = 0;
289
-  u_char ttl_edge = (ttl ? 1 : 0);
290
-  u_char new = 0;
291
 
292
   /* Convert IP prefix string to struct prefix. */
293
   ret = str2prefix (ip_str, &p);
294
@@ -3692,21 +3603,10 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str,
295
       bgp_static = rn->info;
296
 
297
       /* Check previous routes are installed into BGP.  */
298
-      if (bgp_static->valid)
299
-        {
300
-          if (bgp_static->backdoor != backdoor
301
-              || bgp_static->ttl != ttl)
302
-            need_update = 1;
303
-        }
304
+      if (bgp_static->valid && bgp_static->backdoor != backdoor)
305
+        need_update = 1;
306
       
307
-      /* need to catch TTL set/unset transitions for handling of
308
-       * ATOMIC_AGGREGATE 
309
-       */ 
310
-      if ((bgp_static->ttl ? 1 : 0) != ttl_edge)
311
-        ttl_change = 1;
312
-          
313
       bgp_static->backdoor = backdoor;
314
-      bgp_static->ttl = ttl;
315
       
316
       if (rmap)
317
 	{
318
@@ -3733,9 +3633,6 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str,
319
       bgp_static->valid = 0;
320
       bgp_static->igpmetric = 0;
321
       bgp_static->igpnexthop.s_addr = 0;
322
-      bgp_static->ttl = ttl;
323
-      ttl_change = ttl_edge;
324
-      new = 1;
325
       
326
       if (rmap)
327
 	{
328
@@ -3747,39 +3644,6 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str,
329
       rn->info = bgp_static;
330
     }
331
 
332
-  /* ".. sites that choose to advertise the
333
-   *  AS_PATHLIMIT path attribute SHOULD advertise the ATOMIC_AGGREGATE on
334
-   *  all less specific covering prefixes as well as the more specific
335
-   *  prefixes."
336
-   *
337
-   * So:
338
-   * Prefix that has just had pathlimit set/unset:
339
-   * - Must bump ATOMIC refcount on all parents.
340
-   *
341
-   * To catch less specific prefixes:
342
-   * - Must search children for ones with TTL, bump atomic refcount
343
-   *   (we dont care if we're deleting a less specific prefix..)
344
-   */
345
-  if (ttl_change)
346
-    {
347
-      /* Existing static changed TTL, search parents and adjust their atomic */
348
-      bgp_pathlimit_update_parents (bgp, rn, ttl_edge);
349
-    }
350
-  
351
-  if (new)
352
-    {
353
-      struct bgp_node *child;
354
-      struct bgp_static *sc;
355
-      
356
-      /* New static, search children and bump this statics atomic.. */
357
-      child = bgp_lock_node (rn); /* route_next_until unlocks it.. */
358
-      while ((child = bgp_route_next_until (child, rn)))
359
-        {
360
-          if ((sc = child->info) && sc->ttl)
361
-            bgp_static->atomic++;
362
-        }
363
-    }
364
-  
365
   /* If BGP scan is not enabled, we should install this route here.  */
366
   if (! bgp_flag_check (bgp, BGP_FLAG_IMPORT_CHECK))
367
     {
368
@@ -3833,9 +3697,6 @@ bgp_static_unset (struct vty *vty, struct bgp *bgp, const char *ip_str,
369
 
370
   bgp_static = rn->info;
371
   
372
-  /* decrement atomic in parents, see bgp_static_set */
373
-  bgp_pathlimit_update_parents (bgp, rn, 0);
374
-  
375
   /* Update BGP RIB. */
376
   if (! bgp_static->backdoor)
377
     bgp_static_withdraw (bgp, &p, afi, safi);
378
@@ -4032,23 +3893,10 @@ DEFUN (bgp_network,
379
        "Specify a network to announce via BGP\n"
380
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
381
 {
382
-  u_char ttl = 0;
383
-  
384
-  if (argc == 2)
385
-    VTY_GET_INTEGER_RANGE ("Pathlimit TTL", ttl, argv[1], 1, 255);
386
-  
387
   return bgp_static_set (vty, vty->index, argv[0],
388
-			 AFI_IP, bgp_node_safi (vty), NULL, 0, ttl);
389
+			 AFI_IP, bgp_node_safi (vty), NULL, 0);
390
 }
391
 
392
-ALIAS (bgp_network,
393
-       bgp_network_ttl_cmd,
394
-       "network A.B.C.D/M pathlimit <0-255>",
395
-       "Specify a network to announce via BGP\n"
396
-       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
397
-       "AS-Path hopcount limit attribute\n"
398
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
399
-
400
 DEFUN (bgp_network_route_map,
401
        bgp_network_route_map_cmd,
402
        "network A.B.C.D/M route-map WORD",
403
@@ -4058,7 +3906,7 @@ DEFUN (bgp_network_route_map,
404
        "Name of the route map\n")
405
 {
406
   return bgp_static_set (vty, vty->index, argv[0],
407
-			 AFI_IP, bgp_node_safi (vty), argv[1], 0, 0);
408
+			 AFI_IP, bgp_node_safi (vty), argv[1], 0);
409
 }
410
 
411
 DEFUN (bgp_network_backdoor,
412
@@ -4068,24 +3916,10 @@ DEFUN (bgp_network_backdoor,
413
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
414
        "Specify a BGP backdoor route\n")
415
 {
416
-  u_char ttl = 0;
417
-  
418
-  if (argc == 2)
419
-    VTY_GET_INTEGER_RANGE ("Pathlimit TTL", ttl, argv[1], 1, 255);
420
-  
421
   return bgp_static_set (vty, vty->index, argv[0], AFI_IP, SAFI_UNICAST,
422
-                         NULL, 1, ttl);
423
+                         NULL, 1);
424
 }
425
 
426
-ALIAS (bgp_network_backdoor,
427
-       bgp_network_backdoor_ttl_cmd,
428
-       "network A.B.C.D/M backdoor pathlimit <0-255>",
429
-       "Specify a network to announce via BGP\n"
430
-       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
431
-       "Specify a BGP backdoor route\n"
432
-       "AS-Path hopcount limit attribute\n"
433
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
434
-
435
 DEFUN (bgp_network_mask,
436
        bgp_network_mask_cmd,
437
        "network A.B.C.D mask A.B.C.D",
438
@@ -4096,10 +3930,6 @@ DEFUN (bgp_network_mask,
439
 {
440
   int ret;
441
   char prefix_str[BUFSIZ];
442
-  u_char ttl = 0;
443
-  
444
-  if (argc == 3)
445
-    VTY_GET_INTEGER_RANGE ("Pathlimit TTL", ttl, argv[2], 1, 255);
446
   
447
   ret = netmask_str2prefix_str (argv[0], argv[1], prefix_str);
448
   if (! ret)
449
@@ -4109,19 +3939,9 @@ DEFUN (bgp_network_mask,
450
     }
451
 
452
   return bgp_static_set (vty, vty->index, prefix_str,
453
-			 AFI_IP, bgp_node_safi (vty), NULL, 0, ttl);
454
+			 AFI_IP, bgp_node_safi (vty), NULL, 0);
455
 }
456
 
457
-ALIAS (bgp_network_mask,
458
-       bgp_network_mask_ttl_cmd,
459
-       "network A.B.C.D mask A.B.C.D pathlimit <0-255>",
460
-       "Specify a network to announce via BGP\n"
461
-       "Network number\n"
462
-       "Network mask\n"
463
-       "Network mask\n"
464
-       "AS-Path hopcount limit attribute\n"
465
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
466
-
467
 DEFUN (bgp_network_mask_route_map,
468
        bgp_network_mask_route_map_cmd,
469
        "network A.B.C.D mask A.B.C.D route-map WORD",
470
@@ -4143,7 +3963,7 @@ DEFUN (bgp_network_mask_route_map,
471
     }
472
 
473
   return bgp_static_set (vty, vty->index, prefix_str,
474
-			 AFI_IP, bgp_node_safi (vty), argv[2], 0, 0);
475
+			 AFI_IP, bgp_node_safi (vty), argv[2], 0);
476
 }
477
 
478
 DEFUN (bgp_network_mask_backdoor,
479
@@ -4157,11 +3977,7 @@ DEFUN (bgp_network_mask_backdoor,
480
 {
481
   int ret;
482
   char prefix_str[BUFSIZ];
483
-  u_char ttl = 0;
484
   
485
-  if (argc == 3)
486
-    VTY_GET_INTEGER_RANGE ("Pathlimit TTL", ttl, argv[2], 1, 255);
487
-
488
   ret = netmask_str2prefix_str (argv[0], argv[1], prefix_str);
489
   if (! ret)
490
     {
491
@@ -4170,20 +3986,9 @@ DEFUN (bgp_network_mask_backdoor,
492
     }
493
 
494
   return bgp_static_set (vty, vty->index, prefix_str, AFI_IP, SAFI_UNICAST,
495
-                         NULL, 1, ttl);
496
+                         NULL, 1);
497
 }
498
 
499
-ALIAS (bgp_network_mask_backdoor,
500
-       bgp_network_mask_backdoor_ttl_cmd,
501
-       "network A.B.C.D mask A.B.C.D backdoor pathlimit <0-255>",
502
-       "Specify a network to announce via BGP\n"
503
-       "Network number\n"
504
-       "Network mask\n"
505
-       "Network mask\n"
506
-       "Specify a BGP backdoor route\n"
507
-       "AS-Path hopcount limit attribute\n"
508
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
509
-
510
 DEFUN (bgp_network_mask_natural,
511
        bgp_network_mask_natural_cmd,
512
        "network A.B.C.D",
513
@@ -4192,10 +3997,6 @@ DEFUN (bgp_network_mask_natural,
514
 {
515
   int ret;
516
   char prefix_str[BUFSIZ];
517
-  u_char ttl = 0;
518
-  
519
-  if (argc == 2)
520
-    VTY_GET_INTEGER_RANGE ("Pathlimit TTL", ttl, argv[1], 1, 255);
521
 
522
   ret = netmask_str2prefix_str (argv[0], NULL, prefix_str);
523
   if (! ret)
524
@@ -4205,17 +4006,9 @@ DEFUN (bgp_network_mask_natural,
525
     }
526
 
527
   return bgp_static_set (vty, vty->index, prefix_str,
528
-			 AFI_IP, bgp_node_safi (vty), NULL, 0, ttl);
529
+			 AFI_IP, bgp_node_safi (vty), NULL, 0);
530
 }
531
 
532
-ALIAS (bgp_network_mask_natural,
533
-       bgp_network_mask_natural_ttl_cmd,
534
-       "network A.B.C.D pathlimit <0-255>",
535
-       "Specify a network to announce via BGP\n"
536
-       "Network number\n"
537
-       "AS-Path hopcount limit attribute\n"
538
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
539
-
540
 DEFUN (bgp_network_mask_natural_route_map,
541
        bgp_network_mask_natural_route_map_cmd,
542
        "network A.B.C.D route-map WORD",
543
@@ -4235,7 +4028,7 @@ DEFUN (bgp_network_mask_natural_route_map,
544
     }
545
 
546
   return bgp_static_set (vty, vty->index, prefix_str,
547
-			 AFI_IP, bgp_node_safi (vty), argv[1], 0, 0);
548
+			 AFI_IP, bgp_node_safi (vty), argv[1], 0);
549
 }
550
 
551
 DEFUN (bgp_network_mask_natural_backdoor,
552
@@ -4247,10 +4040,6 @@ DEFUN (bgp_network_mask_natural_backdoor,
553
 {
554
   int ret;
555
   char prefix_str[BUFSIZ];
556
-  u_char ttl = 0;
557
-  
558
-  if (argc == 2)
559
-    VTY_GET_INTEGER_RANGE ("Pathlimit TTL", ttl, argv[1], 1, 255);
560
 
561
   ret = netmask_str2prefix_str (argv[0], NULL, prefix_str);
562
   if (! ret)
563
@@ -4260,18 +4049,9 @@ DEFUN (bgp_network_mask_natural_backdoor,
564
     }
565
 
566
   return bgp_static_set (vty, vty->index, prefix_str, AFI_IP, SAFI_UNICAST,
567
-                         NULL, 1, ttl);
568
+                         NULL, 1);
569
 }
570
 
571
-ALIAS (bgp_network_mask_natural_backdoor,
572
-       bgp_network_mask_natural_backdoor_ttl_cmd,
573
-       "network A.B.C.D backdoor pathlimit (1-255>",
574
-       "Specify a network to announce via BGP\n"
575
-       "Network number\n"
576
-       "Specify a BGP backdoor route\n"
577
-       "AS-Path hopcount limit attribute\n"
578
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
579
-
580
 DEFUN (no_bgp_network,
581
        no_bgp_network_cmd,
582
        "no network A.B.C.D/M",
583
@@ -4284,15 +4064,6 @@ DEFUN (no_bgp_network,
584
 }
585
 
586
 ALIAS (no_bgp_network,
587
-       no_bgp_network_ttl_cmd,
588
-       "no network A.B.C.D/M pathlimit <0-255>",
589
-       NO_STR
590
-       "Specify a network to announce via BGP\n"
591
-       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
592
-       "AS-Path hopcount limit attribute\n"
593
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
594
-
595
-ALIAS (no_bgp_network,
596
        no_bgp_network_route_map_cmd,
597
        "no network A.B.C.D/M route-map WORD",
598
        NO_STR
599
@@ -4309,16 +4080,6 @@ ALIAS (no_bgp_network,
600
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
601
        "Specify a BGP backdoor route\n")
602
 
603
-ALIAS (no_bgp_network,
604
-       no_bgp_network_backdoor_ttl_cmd,
605
-       "no network A.B.C.D/M backdoor pathlimit <0-255>",
606
-       NO_STR
607
-       "Specify a network to announce via BGP\n"
608
-       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
609
-       "Specify a BGP backdoor route\n"
610
-       "AS-Path hopcount limit attribute\n"
611
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
612
-
613
 DEFUN (no_bgp_network_mask,
614
        no_bgp_network_mask_cmd,
615
        "no network A.B.C.D mask A.B.C.D",
616
@@ -4342,17 +4103,6 @@ DEFUN (no_bgp_network_mask,
617
 			   bgp_node_safi (vty));
618
 }
619
 
620
-ALIAS (no_bgp_network,
621
-       no_bgp_network_mask_ttl_cmd,
622
-       "no network A.B.C.D mask A.B.C.D pathlimit <0-255>",
623
-       NO_STR
624
-       "Specify a network to announce via BGP\n"
625
-       "Network number\n"
626
-       "Network mask\n"
627
-       "Network mask\n"
628
-       "AS-Path hopcount limit attribute\n"
629
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
630
-
631
 ALIAS (no_bgp_network_mask,
632
        no_bgp_network_mask_route_map_cmd,
633
        "no network A.B.C.D mask A.B.C.D route-map WORD",
634
@@ -4374,18 +4124,6 @@ ALIAS (no_bgp_network_mask,
635
        "Network mask\n"
636
        "Specify a BGP backdoor route\n")
637
 
638
-ALIAS (no_bgp_network_mask,
639
-       no_bgp_network_mask_backdoor_ttl_cmd,
640
-       "no network A.B.C.D mask A.B.C.D  backdoor pathlimit <0-255>",
641
-       NO_STR
642
-       "Specify a network to announce via BGP\n"
643
-       "Network number\n"
644
-       "Network mask\n"
645
-       "Network mask\n"
646
-       "Specify a BGP backdoor route\n"
647
-       "AS-Path hopcount limit attribute\n"
648
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
649
-
650
 DEFUN (no_bgp_network_mask_natural,
651
        no_bgp_network_mask_natural_cmd,
652
        "no network A.B.C.D",
653
@@ -4424,25 +4162,6 @@ ALIAS (no_bgp_network_mask_natural,
654
        "Network number\n"
655
        "Specify a BGP backdoor route\n")
656
 
657
-ALIAS (no_bgp_network_mask_natural,
658
-       no_bgp_network_mask_natural_ttl_cmd,
659
-       "no network A.B.C.D pathlimit <0-255>",
660
-       NO_STR
661
-       "Specify a network to announce via BGP\n"
662
-       "Network number\n"
663
-       "AS-Path hopcount limit attribute\n"
664
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
665
-
666
-ALIAS (no_bgp_network_mask_natural,
667
-       no_bgp_network_mask_natural_backdoor_ttl_cmd,
668
-       "no network A.B.C.D backdoor pathlimit <0-255>",
669
-       NO_STR
670
-       "Specify a network to announce via BGP\n"
671
-       "Network number\n"
672
-       "Specify a BGP backdoor route\n"
673
-       "AS-Path hopcount limit attribute\n"
674
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
675
-
676
 #ifdef HAVE_IPV6
677
 DEFUN (ipv6_bgp_network,
678
        ipv6_bgp_network_cmd,
679
@@ -4450,23 +4169,10 @@ DEFUN (ipv6_bgp_network,
680
        "Specify a network to announce via BGP\n"
681
        "IPv6 prefix <network>/<length>\n")
682
 {
683
-  u_char ttl = 0;
684
-  
685
-  if (argc == 2)
686
-    VTY_GET_INTEGER_RANGE ("Pathlimit TTL", ttl, argv[1], 1, 255);
687
-
688
   return bgp_static_set (vty, vty->index, argv[0], AFI_IP6, SAFI_UNICAST,
689
-                         NULL, 0, ttl);
690
+                         NULL, 0);
691
 }
692
 
693
-ALIAS (ipv6_bgp_network,
694
-       ipv6_bgp_network_ttl_cmd,
695
-       "network X:X::X:X/M pathlimit <0-255>",
696
-       "Specify a network to announce via BGP\n"
697
-       "IPv6 prefix <network>/<length>\n"
698
-       "AS-Path hopcount limit attribute\n"
699
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
700
-
701
 DEFUN (ipv6_bgp_network_route_map,
702
        ipv6_bgp_network_route_map_cmd,
703
        "network X:X::X:X/M route-map WORD",
704
@@ -4476,7 +4182,7 @@ DEFUN (ipv6_bgp_network_route_map,
705
        "Name of the route map\n")
706
 {
707
   return bgp_static_set (vty, vty->index, argv[0], AFI_IP6,
708
-			 bgp_node_safi (vty), argv[1], 0, 0);
709
+			 bgp_node_safi (vty), argv[1], 0);
710
 }
711
 
712
 DEFUN (no_ipv6_bgp_network,
713
@@ -4498,15 +4204,6 @@ ALIAS (no_ipv6_bgp_network,
714
        "Route-map to modify the attributes\n"
715
        "Name of the route map\n")
716
 
717
-ALIAS (no_ipv6_bgp_network,
718
-       no_ipv6_bgp_network_ttl_cmd,
719
-       "no network X:X::X:X/M pathlimit <0-255>",
720
-       NO_STR
721
-       "Specify a network to announce via BGP\n"
722
-       "IPv6 prefix <network>/<length>\n"
723
-       "AS-Path hopcount limit attribute\n"
724
-       "AS-Pathlimit TTL, in number of AS-Path hops\n")
725
-
726
 ALIAS (ipv6_bgp_network,
727
        old_ipv6_bgp_network_cmd,
728
        "ipv6 bgp network X:X::X:X/M",
729
@@ -4524,6 +4221,127 @@ ALIAS (no_ipv6_bgp_network,
730
        "Specify a network to announce via BGP\n"
731
        "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n")
732
 #endif /* HAVE_IPV6 */
733
+
734
+/* stubs for removed AS-Pathlimit commands, kept for config compatibility */
735
+ALIAS_DEPRECATED (bgp_network,
736
+       bgp_network_ttl_cmd,
737
+       "network A.B.C.D/M pathlimit <0-255>",
738
+       "Specify a network to announce via BGP\n"
739
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
740
+       "AS-Path hopcount limit attribute\n"
741
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
742
+ALIAS_DEPRECATED (bgp_network_backdoor,
743
+       bgp_network_backdoor_ttl_cmd,
744
+       "network A.B.C.D/M backdoor pathlimit <0-255>",
745
+       "Specify a network to announce via BGP\n"
746
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
747
+       "Specify a BGP backdoor route\n"
748
+       "AS-Path hopcount limit attribute\n"
749
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
750
+ALIAS_DEPRECATED (bgp_network_mask,
751
+       bgp_network_mask_ttl_cmd,
752
+       "network A.B.C.D mask A.B.C.D pathlimit <0-255>",
753
+       "Specify a network to announce via BGP\n"
754
+       "Network number\n"
755
+       "Network mask\n"
756
+       "Network mask\n"
757
+       "AS-Path hopcount limit attribute\n"
758
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
759
+ALIAS_DEPRECATED (bgp_network_mask_backdoor,
760
+       bgp_network_mask_backdoor_ttl_cmd,
761
+       "network A.B.C.D mask A.B.C.D backdoor pathlimit <0-255>",
762
+       "Specify a network to announce via BGP\n"
763
+       "Network number\n"
764
+       "Network mask\n"
765
+       "Network mask\n"
766
+       "Specify a BGP backdoor route\n"
767
+       "AS-Path hopcount limit attribute\n"
768
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
769
+ALIAS_DEPRECATED (bgp_network_mask_natural,
770
+       bgp_network_mask_natural_ttl_cmd,
771
+       "network A.B.C.D pathlimit <0-255>",
772
+       "Specify a network to announce via BGP\n"
773
+       "Network number\n"
774
+       "AS-Path hopcount limit attribute\n"
775
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
776
+ALIAS_DEPRECATED (bgp_network_mask_natural_backdoor,
777
+       bgp_network_mask_natural_backdoor_ttl_cmd,
778
+       "network A.B.C.D backdoor pathlimit (1-255>",
779
+       "Specify a network to announce via BGP\n"
780
+       "Network number\n"
781
+       "Specify a BGP backdoor route\n"
782
+       "AS-Path hopcount limit attribute\n"
783
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
784
+ALIAS_DEPRECATED (no_bgp_network,
785
+       no_bgp_network_ttl_cmd,
786
+       "no network A.B.C.D/M pathlimit <0-255>",
787
+       NO_STR
788
+       "Specify a network to announce via BGP\n"
789
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
790
+       "AS-Path hopcount limit attribute\n"
791
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
792
+ALIAS_DEPRECATED (no_bgp_network,
793
+       no_bgp_network_backdoor_ttl_cmd,
794
+       "no network A.B.C.D/M backdoor pathlimit <0-255>",
795
+       NO_STR
796
+       "Specify a network to announce via BGP\n"
797
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
798
+       "Specify a BGP backdoor route\n"
799
+       "AS-Path hopcount limit attribute\n"
800
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
801
+ALIAS_DEPRECATED (no_bgp_network,
802
+       no_bgp_network_mask_ttl_cmd,
803
+       "no network A.B.C.D mask A.B.C.D pathlimit <0-255>",
804
+       NO_STR
805
+       "Specify a network to announce via BGP\n"
806
+       "Network number\n"
807
+       "Network mask\n"
808
+       "Network mask\n"
809
+       "AS-Path hopcount limit attribute\n"
810
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
811
+ALIAS_DEPRECATED (no_bgp_network_mask,
812
+       no_bgp_network_mask_backdoor_ttl_cmd,
813
+       "no network A.B.C.D mask A.B.C.D  backdoor pathlimit <0-255>",
814
+       NO_STR
815
+       "Specify a network to announce via BGP\n"
816
+       "Network number\n"
817
+       "Network mask\n"
818
+       "Network mask\n"
819
+       "Specify a BGP backdoor route\n"
820
+       "AS-Path hopcount limit attribute\n"
821
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
822
+ALIAS_DEPRECATED (no_bgp_network_mask_natural,
823
+       no_bgp_network_mask_natural_ttl_cmd,
824
+       "no network A.B.C.D pathlimit <0-255>",
825
+       NO_STR
826
+       "Specify a network to announce via BGP\n"
827
+       "Network number\n"
828
+       "AS-Path hopcount limit attribute\n"
829
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
830
+ALIAS_DEPRECATED (no_bgp_network_mask_natural,
831
+       no_bgp_network_mask_natural_backdoor_ttl_cmd,
832
+       "no network A.B.C.D backdoor pathlimit <0-255>",
833
+       NO_STR
834
+       "Specify a network to announce via BGP\n"
835
+       "Network number\n"
836
+       "Specify a BGP backdoor route\n"
837
+       "AS-Path hopcount limit attribute\n"
838
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
839
+ALIAS_DEPRECATED (ipv6_bgp_network,
840
+       ipv6_bgp_network_ttl_cmd,
841
+       "network X:X::X:X/M pathlimit <0-255>",
842
+       "Specify a network to announce via BGP\n"
843
+       "IPv6 prefix <network>/<length>\n"
844
+       "AS-Path hopcount limit attribute\n"
845
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
846
+ALIAS_DEPRECATED (no_ipv6_bgp_network,
847
+       no_ipv6_bgp_network_ttl_cmd,
848
+       "no network X:X::X:X/M pathlimit <0-255>",
849
+       NO_STR
850
+       "Specify a network to announce via BGP\n"
851
+       "IPv6 prefix <network>/<length>\n"
852
+       "AS-Path hopcount limit attribute\n"
853
+       "AS-Pathlimit TTL, in number of AS-Path hops\n")
854
 
855
 /* Aggreagete address:
856
 
857
@@ -6130,17 +5948,6 @@ route_vty_out_detail (struct vty *vty, struct bgp *bgp, struct prefix *p,
858
 	  vty_out (vty, "%s", VTY_NEWLINE);
859
 	}
860
       
861
-      /* 7: AS Pathlimit */
862
-      if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_AS_PATHLIMIT))
863
-        {
864
-          
865
-          vty_out (vty, "      AS-Pathlimit: %u",
866
-                   attr->pathlimit.ttl);
867
-          if (attr->pathlimit.as)
868
-            vty_out (vty, " (%u)", attr->pathlimit.as);
869
-          vty_out (vty, "%s", VTY_NEWLINE);
870
-        }
871
-      
872
       if (binfo->extra && binfo->extra->damp_info)
873
 	bgp_damp_info_vty (vty, binfo);
874
 
875
@@ -11548,8 +11355,6 @@ bgp_config_write_network (struct vty *vty, struct bgp *bgp,
876
 	  {
877
 	    if (bgp_static->backdoor)
878
 	      vty_out (vty, " backdoor");
879
-            if (bgp_static->ttl)
880
-              vty_out (vty, " pathlimit %u", bgp_static->ttl);
881
           }
882
 
883
 	vty_out (vty, "%s", VTY_NEWLINE);
884
@@ -11638,12 +11443,6 @@ bgp_route_init (void)
885
   install_element (BGP_NODE, &bgp_network_backdoor_cmd);
886
   install_element (BGP_NODE, &bgp_network_mask_backdoor_cmd);
887
   install_element (BGP_NODE, &bgp_network_mask_natural_backdoor_cmd);
888
-  install_element (BGP_NODE, &bgp_network_ttl_cmd);
889
-  install_element (BGP_NODE, &bgp_network_mask_ttl_cmd);
890
-  install_element (BGP_NODE, &bgp_network_mask_natural_ttl_cmd);
891
-  install_element (BGP_NODE, &bgp_network_backdoor_ttl_cmd);
892
-  install_element (BGP_NODE, &bgp_network_mask_backdoor_ttl_cmd);
893
-  install_element (BGP_NODE, &bgp_network_mask_natural_backdoor_ttl_cmd);
894
   install_element (BGP_NODE, &no_bgp_network_cmd);
895
   install_element (BGP_NODE, &no_bgp_network_mask_cmd);
896
   install_element (BGP_NODE, &no_bgp_network_mask_natural_cmd);
897
@@ -11653,12 +11452,6 @@ bgp_route_init (void)
898
   install_element (BGP_NODE, &no_bgp_network_backdoor_cmd);
899
   install_element (BGP_NODE, &no_bgp_network_mask_backdoor_cmd);
900
   install_element (BGP_NODE, &no_bgp_network_mask_natural_backdoor_cmd);
901
-  install_element (BGP_NODE, &no_bgp_network_ttl_cmd);
902
-  install_element (BGP_NODE, &no_bgp_network_mask_ttl_cmd);
903
-  install_element (BGP_NODE, &no_bgp_network_mask_natural_ttl_cmd);
904
-  install_element (BGP_NODE, &no_bgp_network_backdoor_ttl_cmd);
905
-  install_element (BGP_NODE, &no_bgp_network_mask_backdoor_ttl_cmd);
906
-  install_element (BGP_NODE, &no_bgp_network_mask_natural_backdoor_ttl_cmd);
907
 
908
   install_element (BGP_NODE, &aggregate_address_cmd);
909
   install_element (BGP_NODE, &aggregate_address_mask_cmd);
910
@@ -11688,23 +11481,13 @@ bgp_route_init (void)
911
   install_element (BGP_IPV4_NODE, &bgp_network_route_map_cmd);
912
   install_element (BGP_IPV4_NODE, &bgp_network_mask_route_map_cmd);
913
   install_element (BGP_IPV4_NODE, &bgp_network_mask_natural_route_map_cmd);
914
-  install_element (BGP_IPV4_NODE, &bgp_network_ttl_cmd);
915
-  install_element (BGP_IPV4_NODE, &bgp_network_mask_ttl_cmd);
916
-  install_element (BGP_IPV4_NODE, &bgp_network_mask_natural_ttl_cmd);
917
-  install_element (BGP_IPV4_NODE, &bgp_network_backdoor_ttl_cmd);
918
-  install_element (BGP_IPV4_NODE, &bgp_network_mask_backdoor_ttl_cmd);
919
-  install_element (BGP_IPV4_NODE, &bgp_network_mask_natural_backdoor_ttl_cmd);  install_element (BGP_IPV4_NODE, &no_bgp_network_cmd);
920
+  install_element (BGP_IPV4_NODE, &no_bgp_network_cmd);
921
   install_element (BGP_IPV4_NODE, &no_bgp_network_mask_cmd);
922
   install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_cmd);
923
   install_element (BGP_IPV4_NODE, &no_bgp_network_route_map_cmd);
924
   install_element (BGP_IPV4_NODE, &no_bgp_network_mask_route_map_cmd);
925
   install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_route_map_cmd);
926
-  install_element (BGP_IPV4_NODE, &no_bgp_network_ttl_cmd);
927
-  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_ttl_cmd);
928
-  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_ttl_cmd);
929
-  install_element (BGP_IPV4_NODE, &no_bgp_network_backdoor_ttl_cmd);
930
-  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_backdoor_ttl_cmd);
931
-  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_backdoor_ttl_cmd);  install_element (BGP_IPV4_NODE, &no_bgp_network_cmd);
932
+  
933
   install_element (BGP_IPV4_NODE, &aggregate_address_cmd);
934
   install_element (BGP_IPV4_NODE, &aggregate_address_mask_cmd);
935
   install_element (BGP_IPV4_NODE, &aggregate_address_summary_only_cmd);
936
@@ -11733,24 +11516,12 @@ bgp_route_init (void)
937
   install_element (BGP_IPV4M_NODE, &bgp_network_route_map_cmd);
938
   install_element (BGP_IPV4M_NODE, &bgp_network_mask_route_map_cmd);
939
   install_element (BGP_IPV4M_NODE, &bgp_network_mask_natural_route_map_cmd);
940
-  install_element (BGP_IPV4M_NODE, &bgp_network_ttl_cmd);
941
-  install_element (BGP_IPV4M_NODE, &bgp_network_mask_ttl_cmd);
942
-  install_element (BGP_IPV4M_NODE, &bgp_network_mask_natural_ttl_cmd);
943
-  install_element (BGP_IPV4M_NODE, &bgp_network_backdoor_ttl_cmd);
944
-  install_element (BGP_IPV4M_NODE, &bgp_network_mask_backdoor_ttl_cmd);
945
-  install_element (BGP_IPV4M_NODE, &bgp_network_mask_natural_backdoor_ttl_cmd);  install_element (BGP_IPV4_NODE, &no_bgp_network_cmd);
946
   install_element (BGP_IPV4M_NODE, &no_bgp_network_cmd);
947
   install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_cmd);
948
   install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_cmd);
949
   install_element (BGP_IPV4M_NODE, &no_bgp_network_route_map_cmd);
950
   install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_route_map_cmd);
951
   install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_route_map_cmd);
952
-  install_element (BGP_IPV4M_NODE, &no_bgp_network_ttl_cmd);
953
-  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_ttl_cmd);
954
-  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_ttl_cmd);
955
-  install_element (BGP_IPV4M_NODE, &no_bgp_network_backdoor_ttl_cmd);
956
-  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_backdoor_ttl_cmd);
957
-  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_backdoor_ttl_cmd);  install_element (BGP_IPV4_NODE, &no_bgp_network_cmd);
958
   install_element (BGP_IPV4M_NODE, &aggregate_address_cmd);
959
   install_element (BGP_IPV4M_NODE, &aggregate_address_mask_cmd);
960
   install_element (BGP_IPV4M_NODE, &aggregate_address_summary_only_cmd);
961
@@ -11971,10 +11742,8 @@ bgp_route_init (void)
962
   /* New config IPv6 BGP commands.  */
963
   install_element (BGP_IPV6_NODE, &ipv6_bgp_network_cmd);
964
   install_element (BGP_IPV6_NODE, &ipv6_bgp_network_route_map_cmd);
965
-  install_element (BGP_IPV6_NODE, &ipv6_bgp_network_ttl_cmd);
966
   install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_cmd);
967
   install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_route_map_cmd);
968
-  install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_ttl_cmd);
969
 
970
   install_element (BGP_IPV6_NODE, &ipv6_aggregate_address_cmd);
971
   install_element (BGP_IPV6_NODE, &ipv6_aggregate_address_summary_only_cmd);
972
@@ -12293,6 +12062,52 @@ bgp_route_init (void)
973
   install_element (BGP_IPV4_NODE, &bgp_damp_set3_cmd);
974
   install_element (BGP_IPV4_NODE, &bgp_damp_unset_cmd);
975
   install_element (BGP_IPV4_NODE, &bgp_damp_unset2_cmd);
976
+  
977
+  /* Deprecated AS-Pathlimit commands */
978
+  install_element (BGP_NODE, &bgp_network_ttl_cmd);
979
+  install_element (BGP_NODE, &bgp_network_mask_ttl_cmd);
980
+  install_element (BGP_NODE, &bgp_network_mask_natural_ttl_cmd);
981
+  install_element (BGP_NODE, &bgp_network_backdoor_ttl_cmd);
982
+  install_element (BGP_NODE, &bgp_network_mask_backdoor_ttl_cmd);
983
+  install_element (BGP_NODE, &bgp_network_mask_natural_backdoor_ttl_cmd);
984
+  
985
+  install_element (BGP_NODE, &no_bgp_network_ttl_cmd);
986
+  install_element (BGP_NODE, &no_bgp_network_mask_ttl_cmd);
987
+  install_element (BGP_NODE, &no_bgp_network_mask_natural_ttl_cmd);
988
+  install_element (BGP_NODE, &no_bgp_network_backdoor_ttl_cmd);
989
+  install_element (BGP_NODE, &no_bgp_network_mask_backdoor_ttl_cmd);
990
+  install_element (BGP_NODE, &no_bgp_network_mask_natural_backdoor_ttl_cmd);
991
+  
992
+  install_element (BGP_IPV4_NODE, &bgp_network_ttl_cmd);
993
+  install_element (BGP_IPV4_NODE, &bgp_network_mask_ttl_cmd);
994
+  install_element (BGP_IPV4_NODE, &bgp_network_mask_natural_ttl_cmd);
995
+  install_element (BGP_IPV4_NODE, &bgp_network_backdoor_ttl_cmd);
996
+  install_element (BGP_IPV4_NODE, &bgp_network_mask_backdoor_ttl_cmd);
997
+  install_element (BGP_IPV4_NODE, &bgp_network_mask_natural_backdoor_ttl_cmd);
998
+  
999
+  install_element (BGP_IPV4_NODE, &no_bgp_network_ttl_cmd);
1000
+  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_ttl_cmd);
1001
+  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_ttl_cmd);
1002
+  install_element (BGP_IPV4_NODE, &no_bgp_network_backdoor_ttl_cmd);
1003
+  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_backdoor_ttl_cmd);
1004
+  install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_backdoor_ttl_cmd);
1005
+  
1006
+  install_element (BGP_IPV4M_NODE, &bgp_network_ttl_cmd);
1007
+  install_element (BGP_IPV4M_NODE, &bgp_network_mask_ttl_cmd);
1008
+  install_element (BGP_IPV4M_NODE, &bgp_network_mask_natural_ttl_cmd);
1009
+  install_element (BGP_IPV4M_NODE, &bgp_network_backdoor_ttl_cmd);
1010
+  install_element (BGP_IPV4M_NODE, &bgp_network_mask_backdoor_ttl_cmd);
1011
+  install_element (BGP_IPV4M_NODE, &bgp_network_mask_natural_backdoor_ttl_cmd);
1012
+  
1013
+  install_element (BGP_IPV4M_NODE, &no_bgp_network_ttl_cmd);
1014
+  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_ttl_cmd);
1015
+  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_ttl_cmd);
1016
+  install_element (BGP_IPV4M_NODE, &no_bgp_network_backdoor_ttl_cmd);
1017
+  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_backdoor_ttl_cmd);
1018
+  install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_backdoor_ttl_cmd);
1019
+  
1020
+  install_element (BGP_IPV6_NODE, &ipv6_bgp_network_ttl_cmd);
1021
+  install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_ttl_cmd);
1022
 }
1023
 
1024
 void
1025
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h
1026
index 5eed348..3e52859 100644
1027
--- bgpd/bgp_route.h
1028
+++ bgpd/bgp_route.h
1029
@@ -116,9 +116,6 @@ struct bgp_static
1030
 
1031
   /* MPLS label.  */
1032
   u_char tag[3];
1033
-  
1034
-  /* AS-Pathlimit TTL */
1035
-  u_char ttl;
1036
 };
1037
 
1038
 /* Flags which indicate a route is unuseable in some form */
1039
diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c
1040
index aa7dbce..81ff48d 100644
1041
--- bgpd/bgp_routemap.c
1042
+++ bgpd/bgp_routemap.c
1043
@@ -92,107 +92,15 @@ o Cisco route-map
1044
       origin            :  Done
1045
       tag               :  (This will not be implemented by bgpd)
1046
       weight            :  Done
1047
-      pathlimit		:  Done
1048
 
1049
 o Local extention
1050
 
1051
   set ipv6 next-hop global: Done
1052
   set ipv6 next-hop local : Done
1053
-  set pathlimit ttl       : Done
1054
   set as-path exclude     : Done
1055
-  match pathlimit as     : Done
1056
 
1057
 */ 
1058
 
1059
-/* Compiles either AS or TTL argument. It is amused the VTY code
1060
- * has already range-checked the values to be suitable as TTL or ASN
1061
- */
1062
-static void *
1063
-route_pathlimit_compile (const char *arg)
1064
-{
1065
-  unsigned long tmp;
1066
-  u_int32_t *val;
1067
-  char *endptr = NULL;
1068
-
1069
-  /* TTL or AS value shoud be integer. */
1070
-  if (! all_digit (arg))
1071
-    return NULL;
1072
-  
1073
-  tmp = strtoul (arg, &endptr, 10);
1074
-  if (*endptr != '\0' || tmp == ULONG_MAX || tmp > UINT32_MAX)
1075
-    return NULL;
1076
-   
1077
-  if (!(val = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t))))
1078
-    return NULL;
1079
-  
1080
-  *val = tmp;
1081
-  
1082
-  return val;
1083
-}
1084
-
1085
-static void
1086
-route_pathlimit_free (void *rule)
1087
-{
1088
-  XFREE (MTYPE_ROUTE_MAP_COMPILED, rule);
1089
-}
1090
-
1091
-static route_map_result_t
1092
-route_match_pathlimit_as (void *rule, struct prefix *prefix, route_map_object_t type,
1093
-      void *object)
1094
-{
1095
-  struct bgp_info *info = object;
1096
-  struct attr *attr = info->attr;
1097
-  uint32_t as = *(uint32_t *)rule;
1098
-  
1099
-  if (type != RMAP_BGP)
1100
-    return RMAP_NOMATCH;
1101
-  
1102
-  if (!attr->pathlimit.as)
1103
-    return RMAP_NOMATCH;
1104
-  
1105
-  if (as == attr->pathlimit.as)
1106
-    return RMAP_MATCH;
1107
-  
1108
-  return RMAP_NOMATCH;
1109
-}
1110
-
1111
-/* 'match pathlimit as' */
1112
-struct route_map_rule_cmd route_match_pathlimit_as_cmd =
1113
-{
1114
-  "pathlimit as",
1115
-  route_match_pathlimit_as,
1116
-  route_pathlimit_compile,
1117
-  route_pathlimit_free
1118
-};
1119
-
1120
-/* Set pathlimit TTL. */
1121
-static route_map_result_t
1122
-route_set_pathlimit_ttl (void *rule, struct prefix *prefix,
1123
-		         route_map_object_t type, void *object)
1124
-{
1125
-  struct bgp_info *info = object;
1126
-  struct attr *attr = info->attr;
1127
-  u_char ttl = *(uint32_t *)rule;
1128
-  
1129
-  if (type == RMAP_BGP)
1130
-    {
1131
-      attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_AS_PATHLIMIT);
1132
-      attr->pathlimit.ttl = ttl;
1133
-      attr->pathlimit.as = 0;
1134
-    }
1135
-
1136
-  return RMAP_OKAY;
1137
-}
1138
-
1139
-/* Set local preference rule structure. */
1140
-struct route_map_rule_cmd route_set_pathlimit_ttl_cmd = 
1141
-{
1142
-  "pathlimit ttl",
1143
-  route_set_pathlimit_ttl,
1144
-  route_pathlimit_compile,
1145
-  route_pathlimit_free,
1146
-};
1147
-
1148
  /* 'match peer (A.B.C.D|X:X::X:X)' */
1149
 
1150
 /* Compares the peer specified in the 'match peer' clause with the peer
1151
@@ -3743,17 +3651,17 @@ ALIAS (no_set_originator_id,
1152
        "BGP originator ID attribute\n"
1153
        "IP address of originator\n")
1154
 
1155
-DEFUN (set_pathlimit_ttl,
1156
+DEFUN_DEPRECATED (set_pathlimit_ttl,
1157
        set_pathlimit_ttl_cmd,
1158
        "set pathlimit ttl <1-255>",
1159
        SET_STR
1160
        "BGP AS-Pathlimit attribute\n"
1161
        "Set AS-Path Hop-count TTL\n")
1162
 {
1163
-  return bgp_route_set_add (vty, vty->index, "pathlimit ttl", argv[0]);
1164
+  return CMD_SUCCESS;
1165
 }
1166
 
1167
-DEFUN (no_set_pathlimit_ttl,
1168
+DEFUN_DEPRECATED (no_set_pathlimit_ttl,
1169
        no_set_pathlimit_ttl_cmd,
1170
        "no set pathlimit ttl",
1171
        NO_STR
1172
@@ -3761,10 +3669,7 @@ DEFUN (no_set_pathlimit_ttl,
1173
        "BGP AS-Pathlimit attribute\n"
1174
        "Set AS-Path Hop-count TTL\n")
1175
 {
1176
-  if (argc == 0)
1177
-    return bgp_route_set_delete (vty, vty->index, "pathlimit ttl", NULL);
1178
-  
1179
-  return bgp_route_set_delete (vty, vty->index, "pathlimit ttl", argv[0]);
1180
+  return CMD_SUCCESS;
1181
 }
1182
 
1183
 ALIAS (no_set_pathlimit_ttl,
1184
@@ -3775,17 +3680,17 @@ ALIAS (no_set_pathlimit_ttl,
1185
        "BGP AS-Pathlimit attribute\n"
1186
        "Set AS-Path Hop-count TTL\n")
1187
 
1188
-DEFUN (match_pathlimit_as,
1189
+DEFUN_DEPRECATED (match_pathlimit_as,
1190
        match_pathlimit_as_cmd,
1191
        "match pathlimit as <1-65535>",
1192
        MATCH_STR
1193
        "BGP AS-Pathlimit attribute\n"
1194
        "Match Pathlimit AS number\n")
1195
 {
1196
-  return bgp_route_match_add (vty, vty->index, "pathlimit as", argv[0]);
1197
+  return CMD_SUCCESS;
1198
 }
1199
 
1200
-DEFUN (no_match_pathlimit_as,
1201
+DEFUN_DEPRECATED (no_match_pathlimit_as,
1202
        no_match_pathlimit_as_cmd,
1203
        "no match pathlimit as",
1204
        NO_STR
1205
@@ -3793,10 +3698,7 @@ DEFUN (no_match_pathlimit_as,
1206
        "BGP AS-Pathlimit attribute\n"
1207
        "Match Pathlimit AS number\n")
1208
 {
1209
-  if (argc == 0)
1210
-    return bgp_route_match_delete (vty, vty->index, "pathlimit as", NULL);
1211
-  
1212
-  return bgp_route_match_delete (vty, vty->index, "pathlimit as", argv[0]);
1213
+  return CMD_SUCCESS;
1214
 }
1215
 
1216
 ALIAS (no_match_pathlimit_as,
1217
@@ -3959,10 +3861,9 @@ bgp_route_map_init (void)
1218
   install_element (RMAP_NODE, &no_set_ipv6_nexthop_local_val_cmd);
1219
 #endif /* HAVE_IPV6 */
1220
 
1221
-  /* AS-Pathlimit */
1222
-  route_map_install_match (&route_match_pathlimit_as_cmd);
1223
-  route_map_install_set (&route_set_pathlimit_ttl_cmd);
1224
-
1225
+  /* AS-Pathlimit: functionality removed, commands kept for
1226
+   * compatibility.
1227
+   */
1228
   install_element (RMAP_NODE, &set_pathlimit_ttl_cmd);
1229
   install_element (RMAP_NODE, &no_set_pathlimit_ttl_cmd);
1230
   install_element (RMAP_NODE, &no_set_pathlimit_ttl_val_cmd);
1231
diff --git a/doc/bgpd.texi b/doc/bgpd.texi
1232
index 40156b7..e746330 100644
1233
--- doc/bgpd.texi
1234
+++ doc/bgpd.texi
1235
@@ -149,29 +149,6 @@ routes if they aren't present in their IGP routing tables; @code{bgpd}
1236
 doesn't care about IGP routes when announcing its routes.
1237
 @end deffn
1238
 
1239
-@deffn {BGP} {network @var{A.B.C.D/M} pathlimit <0-255>} {}
1240
-This command configures a route to be originated into BGP, just as with the
1241
-previous command, but additionally sets an AS-Pathlimit TTL to be advertised
1242
-on the route. See draft-ietf-idr-as-pathlimit.
1243
-
1244
-Specifying a TTL of 0 can be used to remove pathlimit from a previously
1245
-configured network statement.
1246
-
1247
-Note that when advertising prefixes with AS-Pathlimit set, all less-specific
1248
-prefixes advertised SHOULD also have the Atomic-Aggregate attribute set.
1249
-Failure to do so increases the risks of accidental routing loops occuring.
1250
-
1251
-This implementation will try to automatically set Atomic-Aggregate as
1252
-appropriate on any less-specific prefixes originated by the same speaker,
1253
-however it will not (and often can not) do so where @b{other} speakers in
1254
-the AS are originating more specifics.
1255
-
1256
-Hence the system administrator must take care to ensure that all
1257
-less-specific prefixes originated carry atomic-aggregate as appropriate, by
1258
-manually configuring speakers originating less-specifics to set
1259
-Atomic-Aggregate on those advertisements!
1260
-@end deffn
1261
-
1262
 @deffn {BGP} {no network @var{A.B.C.D/M}} {}
1263
 @end deffn
1264
 
1265
diff --git a/doc/routemap.texi b/doc/routemap.texi
1266
index 9ac001c..db3e72d 100644
1267
--- doc/routemap.texi
1268
+++ doc/routemap.texi
1269
@@ -155,10 +155,6 @@ Matches the specified @var{metric}.
1270
 Matches the specified  @var{community_list}
1271
 @end deffn
1272
 
1273
-@deffn {Route-map Command} {match pathlimit as @var{ASN}} {}
1274
-Matches the specified AS-Pathlimit @var{ASN}.
1275
-@end deffn
1276
-
1277
 @node Route Map Set Command
1278
 @section Route Map Set Command
1279
 
1280
@@ -194,16 +190,6 @@ Set the BGP-4+ global IPv6 nexthop address.
1281
 Set the BGP-4+ link local IPv6 nexthop address.
1282
 @end deffn
1283
 
1284
-@deffn {Route-map Command} {set pathlimit ttl @var{ttl}} {}
1285
-Sets the specified AS-Pathlimit @var{ttl} on the route. This will also cause
1286
-the AS to be set to the local AS. 
1287
-
1288
-Note that the AS-Pathlimit RFC specifies that speakers advertising this
1289
-attribute should set Atomic-aggregate on all less specific routes. Setting
1290
-AS-Pathlimit by route-map does not do this, the user must do so themselves,
1291
-as they wish. 
1292
-@end deffn
1293
-
1294
 @node Route Map Call Command
1295
 @section Route Map Call Command
1296
 
(-)/mnt/work/ports/net/quagga/files/patch-configure.ac (-65 lines)
Lines 1-65 Link Here
1
--- configure.ac.orig	2010-09-13 10:10:29.000000000 +0600
2
+++ configure.ac	2010-09-13 10:12:36.000000000 +0600
3
@@ -443,25 +443,14 @@
4
 #endif /* TIME_WITH_SYS_TIME */
5
 ])dnl
6
 
7
-AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
8
-	net/if_dl.h net/if_var.h net/netopt.h net/route.h \
9
-	inet/nd.h arpa/inet.h netinet/ip_icmp.h \
10
-	fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
11
-	sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
12
-	[], [], QUAGGA_INCLUDES)
13
-
14
-AC_CHECK_HEADERS([ucontext.h], [], [],
15
-[#ifndef __USE_GNU
16
-#define __USE_GNU
17
-#endif /* __USE_GNU */
18
-QUAGGA_INCLUDES
19
-])
20
-
21
 m4_define([QUAGGA_INCLUDES],
22
 QUAGGA_INCLUDES
23
 [#if HAVE_NET_IF_H
24
 # include <net/if.h>
25
 #endif
26
+#if HAVE_NET_IF_VAR_H
27
+# include <net/if_var.h>
28
+#endif
29
 #if HAVE_SYS_UN_H
30
 # include <sys/un.h>
31
 #endif
32
@@ -474,9 +463,6 @@
33
 #if HAVE_NET_IF_DL_H
34
 # include <net/if_dl.h>
35
 #endif
36
-#if HAVE_NET_IF_VAR_H
37
-# include <net/if_var.h>
38
-#endif
39
 #if HAVE_NET_NETOPT_H
40
 # include <net/netopt.h>
41
 #endif
42
@@ -493,8 +479,23 @@
43
 #if HAVE_NETINET_IP_ICMP_H
44
 # include <netinet/ip_icmp.h>
45
 #endif
46
+#include <security/pam_types.h>
47
 ])dnl
48
 
49
+AC_CHECK_HEADERS([sys/un.h net/if.h net/if_var.h net/if_dl.h \
50
+       netinet/in_systm.h netinet/in_var.h net/netopt.h net/route.h \
51
+       inet/nd.h arpa/inet.h netinet/ip_icmp.h \
52
+       fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
53
+       sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
54
+       [], [], QUAGGA_INCLUDES)
55
+
56
+AC_CHECK_HEADERS([ucontext.h], [], [],
57
+[#ifndef __USE_GNU
58
+#define __USE_GNU
59
+#endif /* __USE_GNU */
60
+QUAGGA_INCLUDES
61
+])
62
+
63
 dnl V6 headers are checked below, after we check for v6
64
 
65
 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
(-)/mnt/work/ports/net/quagga/files/patch-git-1 (-14 lines)
Lines 1-14 Link Here
1
diff --git bgpd/bgp_route.c bgpd/bgp_route.c
2
index 2391f74..1cfc451 100644
3
--- bgpd/bgp_route.c
4
+++ bgpd/bgp_route.c
5
@@ -6145,7 +6145,8 @@ route_vty_out_detail (struct vty *vty, struct bgp *bgp, struct prefix *p,
6
 	bgp_damp_info_vty (vty, binfo);
7
 
8
       /* Line 7 display Uptime */
9
-      vty_out (vty, "      Last update: %s", ctime (&binfo->uptime));
10
+      time_t tbuf = time(NULL) - (bgp_clock() - binfo->uptime);
11
+      vty_out (vty, "      Last update: %s", ctime(&tbuf));
12
     }
13
   vty_out (vty, "%s", VTY_NEWLINE);
14
 }  
(-)/mnt/work/ports/net/quagga/files/patch-git-2 (-20 lines)
Lines 1-20 Link Here
1
diff --git a/lib/zclient.c b/lib/zclient.c
2
index d3d5322..52a3627 100644
3
--- lib/zclient.c
4
+++ lib/zclient.c
5
@@ -339,12 +339,12 @@ zclient_start (struct zclient *zclient)
6
   /* Create read thread. */
7
   zclient_event (ZCLIENT_READ, zclient);
8
 
9
-  /* We need interface information. */
10
-  zebra_message_send (zclient, ZEBRA_INTERFACE_ADD);
11
-
12
   /* We need router-id information. */
13
   zebra_message_send (zclient, ZEBRA_ROUTER_ID_ADD);
14
 
15
+  /* We need interface information. */
16
+  zebra_message_send (zclient, ZEBRA_INTERFACE_ADD);
17
+
18
   /* Flush all redistribute request. */
19
   for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
20
     if (i != zclient->redist_default && zclient->redist[i])
(-)/mnt/work/ports/net/quagga/files/patch-git-3 (-40 lines)
Lines 1-40 Link Here
1
diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c
2
index bfb6df2..04367f0 100644
3
--- ospf6d/ospf6_spf.c
4
+++ ospf6d/ospf6_spf.c
5
@@ -50,7 +50,9 @@ ospf6_vertex_cmp (void *a, void *b)
6
   struct ospf6_vertex *vb = (struct ospf6_vertex *) b;
7
 
8
   /* ascending order */
9
-  return (va->cost - vb->cost);
10
+  if (va->cost != vb->cost)
11
+    return (va->cost - vb->cost);
12
+  return (va->hops - vb->hops);
13
 }
14
 
15
 static int
16
@@ -320,22 +322,8 @@ ospf6_spf_install (struct ospf6_vertex *v,
17
         }
18
 
19
       prev = (struct ospf6_vertex *) route->route_option;
20
-      if (prev->hops > v->hops)
21
-        {
22
-          for (ALL_LIST_ELEMENTS (prev->child_list, node, nnode, w))
23
-            {
24
-              assert (w->parent == prev);
25
-              w->parent = v;
26
-              listnode_add_sort (v->child_list, w);
27
-            }
28
-          listnode_delete (prev->parent->child_list, prev);
29
-          listnode_add_sort (v->parent->child_list, v);
30
-
31
-          ospf6_vertex_delete (prev);
32
-          route->route_option = v;
33
-        }
34
-      else
35
-        ospf6_vertex_delete (v);
36
+      assert (prev->hops <= v->hops);
37
+      ospf6_vertex_delete (v);
38
 
39
       return -1;
40
     }
(-)/mnt/work/ports/net/quagga/files/patch-git-4 (-17 lines)
Lines 1-17 Link Here
1
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
2
index a5f9552..9102add 100644
3
--- bgpd/bgp_packet.c
4
+++ bgpd/bgp_packet.c
5
@@ -1885,12 +1885,6 @@ bgp_notify_receive (struct peer *peer, bgp_size_t size)
6
       bgp_notify.subcode == BGP_NOTIFY_OPEN_UNSUP_PARAM )
7
     UNSET_FLAG (peer->sflags, PEER_STATUS_CAPABILITY_OPEN);
8
 
9
-  /* Also apply to Unsupported Capability until remote router support
10
-     capability. */
11
-  if (bgp_notify.code == BGP_NOTIFY_OPEN_ERR &&
12
-      bgp_notify.subcode == BGP_NOTIFY_OPEN_UNSUP_CAPBL)
13
-    UNSET_FLAG (peer->sflags, PEER_STATUS_CAPABILITY_OPEN);
14
-
15
   BGP_EVENT_ADD (peer, Receive_NOTIFICATION_message);
16
 }
17
 
(-)/mnt/work/ports/net/quagga/files/patch-git-5 (-127 lines)
Lines 1-127 Link Here
1
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
2
index cb34745..236baf1 100644
3
--- ospf6d/ospf6_interface.c
4
+++ ospf6d/ospf6_interface.c
5
@@ -118,6 +118,7 @@ ospf6_interface_create (struct interface *ifp)
6
   oi->cost = 1;
7
   oi->state = OSPF6_INTERFACE_DOWN;
8
   oi->flag = 0;
9
+  oi->mtu_ignore = 0;
10
 
11
   /* Try to adjust I/O buffer size with IfMtu */
12
   oi->ifmtu = ifp->mtu6;
13
@@ -784,6 +785,8 @@ ospf6_interface_show (struct vty *vty, struct interface *ifp)
14
     {
15
       vty_out (vty, "  Instance ID %d, Interface MTU %d (autodetect: %d)%s",
16
 	       oi->instance_id, oi->ifmtu, ifp->mtu6, VNL);
17
+      vty_out (vty, "  MTU mismatch detection: %s%s", oi->mtu_ignore ?
18
+	       "disabled" : "enabled", VNL);
19
       inet_ntop (AF_INET, &oi->area->area_id,
20
                  strbuf, sizeof (strbuf));
21
       vty_out (vty, "  Area ID %s, Cost %hu%s", strbuf, oi->cost,
22
@@ -1368,6 +1371,55 @@ DEFUN (no_ipv6_ospf6_passive,
23
   return CMD_SUCCESS;
24
 }
25
 
26
+DEFUN (ipv6_ospf6_mtu_ignore,
27
+       ipv6_ospf6_mtu_ignore_cmd,
28
+       "ipv6 ospf6 mtu-ignore",
29
+       IP6_STR
30
+       OSPF6_STR
31
+       "Ignore MTU mismatch on this interface\n"
32
+       )
33
+{
34
+  struct ospf6_interface *oi;
35
+  struct interface *ifp;
36
+
37
+  ifp = (struct interface *) vty->index;
38
+  assert (ifp);
39
+
40
+  oi = (struct ospf6_interface *) ifp->info;
41
+  if (oi == NULL)
42
+    oi = ospf6_interface_create (ifp);
43
+  assert (oi);
44
+
45
+  oi->mtu_ignore = 1;
46
+
47
+  return CMD_SUCCESS;
48
+}
49
+
50
+DEFUN (no_ipv6_ospf6_mtu_ignore,
51
+       no_ipv6_ospf6_mtu_ignore_cmd,
52
+       "no ipv6 ospf6 mtu-ignore",
53
+       NO_STR
54
+       IP6_STR
55
+       OSPF6_STR
56
+       "Ignore MTU mismatch on this interface\n"
57
+       )
58
+{
59
+  struct ospf6_interface *oi;
60
+  struct interface *ifp;
61
+
62
+  ifp = (struct interface *) vty->index;
63
+  assert (ifp);
64
+
65
+  oi = (struct ospf6_interface *) ifp->info;
66
+  if (oi == NULL)
67
+    oi = ospf6_interface_create (ifp);
68
+  assert (oi);
69
+
70
+  oi->mtu_ignore = 0;
71
+
72
+  return CMD_SUCCESS;
73
+}
74
+
75
 DEFUN (ipv6_ospf6_advertise_prefix_list,
76
        ipv6_ospf6_advertise_prefix_list_cmd,
77
        "ipv6 ospf6 advertise prefix-list WORD",
78
@@ -1495,6 +1547,9 @@ config_write_ospf6_interface (struct vty *vty)
79
       if (CHECK_FLAG (oi->flag, OSPF6_INTERFACE_PASSIVE))
80
         vty_out (vty, " ipv6 ospf6 passive%s", VNL);
81
 
82
+      if (oi->mtu_ignore)
83
+        vty_out (vty, " ipv6 ospf6 mtu-ignore%s", VNL);
84
+
85
       vty_out (vty, "!%s", VNL);
86
     }
87
   return 0;
88
@@ -1547,6 +1602,9 @@ ospf6_interface_init (void)
89
   install_element (INTERFACE_NODE, &ipv6_ospf6_passive_cmd);
90
   install_element (INTERFACE_NODE, &no_ipv6_ospf6_passive_cmd);
91
 
92
+  install_element (INTERFACE_NODE, &ipv6_ospf6_mtu_ignore_cmd);
93
+  install_element (INTERFACE_NODE, &no_ipv6_ospf6_mtu_ignore_cmd);
94
+
95
   install_element (INTERFACE_NODE, &ipv6_ospf6_advertise_prefix_list_cmd);
96
   install_element (INTERFACE_NODE, &no_ipv6_ospf6_advertise_prefix_list_cmd);
97
 }
98
diff --git a/ospf6d/ospf6_interface.h b/ospf6d/ospf6_interface.h
99
index 878c29e..cf758c0 100644
100
--- ospf6d/ospf6_interface.h
101
+++ ospf6d/ospf6_interface.h
102
@@ -76,6 +76,9 @@ struct ospf6_interface
103
   /* OSPF6 Interface flag */
104
   char flag;
105
 
106
+  /* MTU mismatch check */
107
+  u_char mtu_ignore;
108
+
109
   /* Decision of DR Election */
110
   u_int32_t drouter;
111
   u_int32_t bdrouter;
112
diff --git a/ospf6d/ospf6_message.c b/ospf6d/ospf6_message.c
113
index d06eba2..51933b7 100644
114
--- ospf6d/ospf6_message.c
115
+++ ospf6d/ospf6_message.c
116
@@ -832,7 +832,7 @@ ospf6_dbdesc_recv (struct in6_addr *src, struct in6_addr *dst,
117
     ((caddr_t) oh + sizeof (struct ospf6_header));
118
 
119
   /* Interface MTU check */
120
-  if (ntohs (dbdesc->ifmtu) != oi->ifmtu)
121
+  if (!oi->mtu_ignore && ntohs (dbdesc->ifmtu) != oi->ifmtu)
122
     {
123
       if (IS_OSPF6_DEBUG_MESSAGE (oh->type, RECV))
124
         zlog_debug ("I/F MTU mismatch");
125
-- 
126
1.7.4.4
127
(-)/mnt/work/ports/net/quagga/files/patch-lib-sockopt.c (-81 lines)
Lines 1-81 Link Here
1
--- lib/sockopt.c	2010-04-20 21:44:26.000000000 -0400
2
+++ lib/sockopt.c	2010-11-03 10:55:06.000000000 -0400
3
@@ -221,13 +221,13 @@ setsockopt_multicast_ipv4(int sock, 
4
 #ifdef HAVE_STRUCT_IP_MREQN_IMR_IFINDEX
5
   /* This is better because it uses ifindex directly */
6
   struct ip_mreqn mreqn;
7
+  struct group_req gr;
8
+  struct sockaddr_in *si;
9
   int ret;
10
   
11
   switch (optname)
12
     {
13
     case IP_MULTICAST_IF:
14
-    case IP_ADD_MEMBERSHIP:
15
-    case IP_DROP_MEMBERSHIP:
16
       memset (&mreqn, 0, sizeof(mreqn));
17
 
18
       if (mcast_addr)
19
@@ -240,6 +240,37 @@ setsockopt_multicast_ipv4(int sock, 
20
       
21
       ret = setsockopt(sock, IPPROTO_IP, optname,
22
 		       (void *)&mreqn, sizeof(mreqn));
23
+      return ret;
24
+      break;
25
+
26
+    case IP_ADD_MEMBERSHIP:
27
+    case IP_DROP_MEMBERSHIP:
28
+      if (ifindex)
29
+        {
30
+          memset (&gr, 0, sizeof(gr));
31
+	  si = (struct sockaddr_in *)&gr.gr_group;
32
+	  gr.gr_interface = ifindex;
33
+          if (mcast_addr)
34
+            si->sin_family = AF_INET;
35
+#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
36
+            si->sin_len = sizeof(struct sockaddr_in);
37
+#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
38
+	    si->sin_addr.s_addr = mcast_addr;
39
+          if (optname == IP_ADD_MEMBERSHIP)
40
+            ret = setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void *)&gr, sizeof(gr));
41
+          else
42
+            ret = setsockopt(sock, IPPROTO_IP, MCAST_LEAVE_GROUP, (void *)&gr, sizeof(gr));
43
+        }
44
+      else
45
+        {
46
+          memset (&mreqn, 0, sizeof(mreqn));
47
+          if (mcast_addr)
48
+	    mreqn.imr_multiaddr.s_addr = mcast_addr;
49
+	  mreqn.imr_address = if_addr;
50
+      
51
+          ret = setsockopt(sock, IPPROTO_IP, optname,
52
+		       (void *)&mreqn, sizeof(mreqn));
53
+        }
54
       if ((ret < 0) && (optname == IP_ADD_MEMBERSHIP) && (errno == EADDRINUSE))
55
         {
56
 	  /* see above: handle possible problem when interface comes back up */
57
@@ -248,12 +279,18 @@ setsockopt_multicast_ipv4(int sock, 
58
 		    "re-add (fd %d, ifaddr %s, mcast %s, ifindex %u)",
59
 		    sock,
60
 		    inet_ntop(AF_INET, &if_addr, buf[0], sizeof(buf[0])),
61
-		    inet_ntop(AF_INET, &mreqn.imr_multiaddr,
62
-			      buf[1], sizeof(buf[1])), ifindex);
63
-	  setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP,
64
-		     (void *)&mreqn, sizeof(mreqn));
65
-	  ret = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
66
-			   (void *)&mreqn, sizeof(mreqn));
67
+		    inet_ntop(AF_INET, &mcast_addr, buf[1], sizeof(buf[1])),
68
+                    ifindex);
69
+          if (ifindex)
70
+            {
71
+	      setsockopt(sock, IPPROTO_IP, MCAST_LEAVE_GROUP, (void *)&gr, sizeof(gr));
72
+	      ret = setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void *)&gr, sizeof(gr));
73
+            }
74
+          else
75
+            {
76
+	      setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, (void *)&mreqn, sizeof(mreqn));
77
+	      ret = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *)&mreqn, sizeof(mreqn));
78
+            }
79
         }
80
       return ret;
81
       break;

Return to bug 156332