Hi, I am new to this list and would like to ask a (maybe stupid) question to the dicussion: If we want to write a script to expand the AS MACRO, how can we avoid to go into a loop if multiple AS-MACROs reference each other ? Ping Lu Cable & Wireless USA Network Tools and Analysis Group W: 703-292-2359 E: plu@cw.net
-----Original Message----- From: Cengiz Alaettinoglu [mailto:cengiz@packetdesign.com] Sent: Wednesday, January 10, 2001 12:14 PM To: Shane Kerr Cc: Wilfried Woeber, UniVie/ACOnet; farrache@cc.in2p3.fr; db-wg@ripe.net; routing-wg@ripe.net; Henk.Uijterwaal@ripe.net Subject: RE: Loop in AS macro
Gilles, Wilfried, and all,
This is not a bug, or even an inconsistency. Consider the following as-macro objects:
as-macro: AS-X members: AS-Y, AS123
as-macro: AS-Y members: AS-X, AS456, AS789
In this case, AS-X and AS-Y both expand to the same aut-num objects: AS123, AS456, and AS789. However, they may have different
Shane Kerr (shane@ripe.net) on January 10: maintainers,
contacts, descriptions, and so on. In RPSL, many more kinds of loops are possible as well, in as-set, route-set, and filter-set objects.
RPSL defines semantics when loops exist. However, it does not promote them, or prohibit additional restrictions by the registry operators not to have loops.
External software that deals with the set objects needs to do loop detection in order to prevent infinite loops. For as-set
objects (which
are as-macro objects in RIPE-181), this is fairly easy: keep a list or hash of the AS sets expanded, and don't expand them again. For route-set and filter-set objects it is not quite so easy. If you need help with these, you can send me and e-mail and I can explain the techniques that I've used for these objects.
Shane Kerr <shane@ripe.net> Database Software Engineer RIPE NCC +31 20 535 4427
p.s. This is actually a feature, not an bug. :)
p.p.s. It has been argued (by me) that RPSL allows objects that are logically impossible, but the RFC authors don't seem to think so!
On Wed, 10 Jan 2001, Wilfried Woeber, UniVie/ACOnet wrote:
Hi Gilles,
I guess we wouldn't be able to check against those accidents at the time of a DB _update_...
But checking the RR internal _data_ consistency could maybe become part of the RIS (or similar) project?
Henk, any comments?
An interesting aside: I guess similar problems could occur with RPSL-based RRs?
-WW
_________________________________:____________________________
Wilfried Woeber : e-mail: Woeber@CC.UniVie.ac.at UniVie Computer Center - ACOnet : Tel: +43 1 4277 - 140 33 Universitaetsstrasse 7 : Fax: +43 1 4277 - 9 140 A-1010 Vienna, Austria, Europe : RIPE-DB: WW144, PGP keyID 0xF0ACB369
~~~~~~~~~ > > > > To: staff@ip.tele.dk, peering@tli.de, ip-oper@tli.de, admin-c@tli.de > > CC: farrache@cc.in2p3.fr, db-wg@ripe.net, routing-wg@ripe.net > > Subject: Loop in AS macro > > Date: Wed, 10 Jan 2001 10:28:15 +0100 > > From: Gilles Farrache <farrache@cc.in2p3.fr> > > > > Dear database managers, > > > > I notice a loop in the followings AS-MACRO, in fact AS-TELEDANMARKINTERNATIONAL > > is calling AS-TLI which is calling AS-TELEDK which is calling AS-TELEDANMARKINTERNATIONAL. > > (and all that make that our automatic filter generation tool fails) > > > > Could you correct those macro and will the Ripe database management provide any > > control on that kind of loop ? > > > > Gilles > > > > as-macro: AS-TELEDANMARKINTERNATIONAL > > descr: Tele Danmark customers outside Denmark > > as-list: AS1902 AS12461 > > as-list: AS8881 AS-KOMTEL > > as-list: AS13194 AS-BITE > > as-list: AS6709 > > as-list: AS8650 AS-TLI > > as-list: AS8542 > > as-list: AS12294 AS-TSUA AS6807 AS8349 AS12788 AS12837 AS12872 AS13249 AS15386 AS15497 AS15929 AS16007 > > as-list: AS12546 > > as-list: AS15389 > > tech-c: AS5071-RIPE > > admin-c: AS5071-RIPE > > notify: staff@ip.tele.dk > > notify: peering@tli.de > > mnt-by: AS3292-MNT > > changed: jesper@skriver.dk 20001103 > > changed: toba@tdk.dk 20001117 > > changed: tee@tdk.dk 20001123 > > changed: jesper@skriver.dk 20001228 > > changed: jesper@skriver.dk 20010109 > > source: RIPE > > > > as-macro: AS-TLI > > descr: Talkline GmbH, Internet Division > > descr: List of ASes according to Talkline Internet (AS8650) > > descr: and customers > > as-list: AS5605 > > as-list: AS6783 > > as-list: AS8650 > > as-list: AS8881 > > as-list: AS12461 > > as-list: AS12546 > > as-list: AS-TELEDK > > as-list: AS-GLOBAL > > tech-c: TLIP1-RIPE > > admin-c: TLIP1-RIPE > > notify: peering@tli.de > > mnt-by: TALKLINE-MNT > > changed: thomas@tli.de 19990923 > > changed: thomas@tli.de 19991020 > > changed: thomas@tli.de 19991025 > > changed: thomas@tli.de 20001023 > > changed: thomas@tli.de 20001025 > > source: RIPE > > > > as-macro: AS-TELEDK > > descr: Tele Danmark and Tele Danmark customers > > as-list: AS-TELEDANMARKDANISH > > as-list: AS-TELEDANMARKINTERNATIONAL > > as-list: AS-BELBONEMEMBERS > > as-list: AS-GLOBAL > > tech-c: AS5071-RIPE > > admin-c: AS5071-RIPE > > notify: staff@ip.tele.dk > > notify: peering@tli.de > > mnt-by: AS3292-MNT > > changed: jesper@skriver.dk 19990922 > > changed: jesper@skriver.dk 19991019 > > changed: jesper@skriver.dk 19991025 > > changed: jesper@skriver.dk 19991210 > > changed: toba@tdk.dk 20000903 > > source: RIPE > > -------------------------------------------------------------- ------------------ > > > > Cengiz -- Cengiz Alaettinoglu Packet Design Inc.
On Wed, Jan 10, 2001 at 04:15:52PM -0500, Lu, Ping wrote:
Hi, I am new to this list and would like to ask a (maybe stupid) question to the dicussion:
If we want to write a script to expand the AS MACRO, how can we avoid to go into a loop if multiple AS-MACROs reference each other ?
Simple. You keep a list of AS-MACROS you have expanded and expand only those not yet expanded. Peter B. Juul, Uni-C (PBJ255-RIPE)
Ping, What I usually do (in Perl) is something like this: my %entries_seen; foreach my $as_set (@as_sets) { # if we've seen this value (recursive as-set), skip next if ($entries_seen{$as_set}); # note that we've seen this as-set $entries_seen{$as_set}++; # get a list of members of the as-set, and process appropriately foreach my $member (members($as_set)) { # add member as-sets to the list of as-sets to process push(@as_sets, $member) if ($member =~ /^AS-/i); # other processing here . . . } } If you're using some other scripting language, it will be different, but typically no more difficult. If you're in C, you may want to use glib or something like that, otherwise you'll need to use a list or hash you write yourself. Shane Kerr <shane@ripe.net> Database Software Engineer RIPE NCC +31 20 535 4427 On Wed, 10 Jan 2001, Lu, Ping wrote:
Hi, I am new to this list and would like to ask a (maybe stupid) question to the dicussion:
If we want to write a script to expand the AS MACRO, how can we avoid to go into a loop if multiple AS-MACROs reference each other ?
Ping Lu Cable & Wireless USA Network Tools and Analysis Group W: 703-292-2359 E: plu@cw.net
-----Original Message----- From: Cengiz Alaettinoglu [mailto:cengiz@packetdesign.com] Sent: Wednesday, January 10, 2001 12:14 PM To: Shane Kerr Cc: Wilfried Woeber, UniVie/ACOnet; farrache@cc.in2p3.fr; db-wg@ripe.net; routing-wg@ripe.net; Henk.Uijterwaal@ripe.net Subject: RE: Loop in AS macro
Gilles, Wilfried, and all,
This is not a bug, or even an inconsistency. Consider the following as-macro objects:
as-macro: AS-X members: AS-Y, AS123
as-macro: AS-Y members: AS-X, AS456, AS789
In this case, AS-X and AS-Y both expand to the same aut-num objects: AS123, AS456, and AS789. However, they may have different
Shane Kerr (shane@ripe.net) on January 10: maintainers,
contacts, descriptions, and so on. In RPSL, many more kinds of loops are possible as well, in as-set, route-set, and filter-set objects.
RPSL defines semantics when loops exist. However, it does not promote them, or prohibit additional restrictions by the registry operators not to have loops.
External software that deals with the set objects needs to do loop detection in order to prevent infinite loops. For as-set
objects (which
are as-macro objects in RIPE-181), this is fairly easy: keep a list or hash of the AS sets expanded, and don't expand them again. For route-set and filter-set objects it is not quite so easy. If you need help with these, you can send me and e-mail and I can explain the techniques that I've used for these objects.
Shane Kerr <shane@ripe.net> Database Software Engineer RIPE NCC +31 20 535 4427
p.s. This is actually a feature, not an bug. :)
p.p.s. It has been argued (by me) that RPSL allows objects that are logically impossible, but the RFC authors don't seem to think so!
On Wed, 10 Jan 2001, Wilfried Woeber, UniVie/ACOnet wrote:
Hi Gilles,
I guess we wouldn't be able to check against those accidents at the time of a DB _update_...
But checking the RR internal _data_ consistency could maybe become part of the RIS (or similar) project?
Henk, any comments?
An interesting aside: I guess similar problems could occur with RPSL-based RRs?
-WW
_________________________________:____________________________
Wilfried Woeber : e-mail: Woeber@CC.UniVie.ac.at UniVie Computer Center - ACOnet : Tel: +43 1 4277 - 140 33 Universitaetsstrasse 7 : Fax: +43 1 4277 - 9 140 A-1010 Vienna, Austria, Europe : RIPE-DB: WW144, PGP keyID 0xF0ACB369
~~~~~~~~~ > > > > To: staff@ip.tele.dk, peering@tli.de, ip-oper@tli.de, admin-c@tli.de > > CC: farrache@cc.in2p3.fr, db-wg@ripe.net, routing-wg@ripe.net > > Subject: Loop in AS macro > > Date: Wed, 10 Jan 2001 10:28:15 +0100 > > From: Gilles Farrache <farrache@cc.in2p3.fr> > > > > Dear database managers, > > > > I notice a loop in the followings AS-MACRO, in fact AS-TELEDANMARKINTERNATIONAL > > is calling AS-TLI which is calling AS-TELEDK which is calling AS-TELEDANMARKINTERNATIONAL. > > (and all that make that our automatic filter generation tool fails) > > > > Could you correct those macro and will the Ripe database management provide any > > control on that kind of loop ? > > > > Gilles > > > > as-macro: AS-TELEDANMARKINTERNATIONAL > > descr: Tele Danmark customers outside Denmark > > as-list: AS1902 AS12461 > > as-list: AS8881 AS-KOMTEL > > as-list: AS13194 AS-BITE > > as-list: AS6709 > > as-list: AS8650 AS-TLI > > as-list: AS8542 > > as-list: AS12294 AS-TSUA AS6807 AS8349 AS12788 AS12837 AS12872 AS13249 AS15386 AS15497 AS15929 AS16007 > > as-list: AS12546 > > as-list: AS15389 > > tech-c: AS5071-RIPE > > admin-c: AS5071-RIPE > > notify: staff@ip.tele.dk > > notify: peering@tli.de > > mnt-by: AS3292-MNT > > changed: jesper@skriver.dk 20001103 > > changed: toba@tdk.dk 20001117 > > changed: tee@tdk.dk 20001123 > > changed: jesper@skriver.dk 20001228 > > changed: jesper@skriver.dk 20010109 > > source: RIPE > > > > as-macro: AS-TLI > > descr: Talkline GmbH, Internet Division > > descr: List of ASes according to Talkline Internet (AS8650) > > descr: and customers > > as-list: AS5605 > > as-list: AS6783 > > as-list: AS8650 > > as-list: AS8881 > > as-list: AS12461 > > as-list: AS12546 > > as-list: AS-TELEDK > > as-list: AS-GLOBAL > > tech-c: TLIP1-RIPE > > admin-c: TLIP1-RIPE > > notify: peering@tli.de > > mnt-by: TALKLINE-MNT > > changed: thomas@tli.de 19990923 > > changed: thomas@tli.de 19991020 > > changed: thomas@tli.de 19991025 > > changed: thomas@tli.de 20001023 > > changed: thomas@tli.de 20001025 > > source: RIPE > > > > as-macro: AS-TELEDK > > descr: Tele Danmark and Tele Danmark customers > > as-list: AS-TELEDANMARKDANISH > > as-list: AS-TELEDANMARKINTERNATIONAL > > as-list: AS-BELBONEMEMBERS > > as-list: AS-GLOBAL > > tech-c: AS5071-RIPE > > admin-c: AS5071-RIPE > > notify: staff@ip.tele.dk > > notify: peering@tli.de > > mnt-by: AS3292-MNT > > changed: jesper@skriver.dk 19990922 > > changed: jesper@skriver.dk 19991019 > > changed: jesper@skriver.dk 19991025 > > changed: jesper@skriver.dk 19991210 > > changed: toba@tdk.dk 20000903 > > source: RIPE > > -------------------------------------------------------------- ------------------ > > > > Cengiz -- Cengiz Alaettinoglu Packet Design Inc.
Hello Ping,
If we want to write a script to expand the AS MACRO, how can we avoid to go into a loop if multiple AS-MACROs reference each other ?
I am not sure about your goals but just so you are aware you can query our server (whois.radb.net) and issue the '!i' (ie, set expansion) command. Our server has all the big registries and many others (ie, ripe, radb, mci/cw, bell, apnic, verio, ...). It's syntax is like this: !i<set name>[,1] The optional ',1' is a flag to turn on recursive look up. Here is an example: % whois -h whois.radb.net \!ias-onecall A203 AS-IEI AS-INDNET AS-INDYNET AS-IONENET AS10403 AS10680 AS10694 AS10718 AS11069 AS11106 AS11114 AS11126 AS11550 AS12074 AS12277 AS13394 AS1767 AS5072 AS5689 AS6164 AS6402 AS6571 AS7206 AS7900 AS8169 AS87 % whois -h whois.radb.net \!ias-onecall,1 A270 AS10403 AS10680 AS10694 AS10718 AS10893 AS11069 AS11106 AS11114 AS11126 AS11550 AS11782 AS12074 AS12277 AS12314 AS13394 AS13592 AS13921 AS14100 AS15116 AS17239 AS1767 AS2711 AS2939 AS3060 AS5072 AS5689 AS6164 AS6365 AS6402 AS6571 AS7206 AS7393 AS7900 AS8169 AS8175 AS87 I hope this helps. --jerry
participants (4)
-
gerald@merit.edu
-
Lu, Ping
-
Peter B . Juul
-
Shane Kerr