Converting Ethernet and Token Ring MAC Addresses

Problem

You want to convert the bit ordering of MAC addresses to see how they will look after passing through an Ethernet-to-Token Ring bridge.

Solution

The Perl script in Example 15-1 converts Ethernet addresses to the way they will appear when connected through a bridge to a Token Ring. It also performs the reverse translation of Token Ring addresses to Ethernet, which is identical.

Example 15-1. eth-tok-mac.pl

#!/usr/local/bin/perl # # eth-tok-mac.pl -- a script to convert Ethernet to Token Ring MAC # addresses when bridging with RSRB or DLSw # $convert[0] = "0"; $convert[1] = "8"; $convert[2] = "4"; $convert[3] = "C"; $convert[4] = "2"; $convert[5] = "A"; $convert[6] = "6"; $convert[7] = "E"; $convert[8] = "1"; $convert[9] = "9"; $convert[10] = "5"; $convert[11] = "D"; $convert[12] = "3"; $convert[13] = "B"; $convert[14] = "7"; $convert[15] = "F"; if($#ARGV != 0) {usage();} $input_MAC = $ARGV[0]; # first split the incoming MAC into bytes $_ = $input_MAC; s/[.:-]//g; for ($i=0; $i*2 < length($_); $i++) { @input_bytes[$i] = substr($_, $i*2, 2); } for ($i=0; $i <= $#input_bytes; $i++) { $_ = @input_bytes[$i]; # first check that there aren't any illegal characters in this address if(/[^0-9a-fA-F]/) { usage(); } if (length() == 2 ) { @output_bytes[$i] = $convert[hex(substr($_, 1, 1))] . $convert[hex(substr($_, 0, 1))]; } else { usage(); } } print "the resulting MAC is: "; for ($i=0; $i < $#input_bytes; $i++) { print "@output_bytes[$i]-"; ...

Get Cisco IOS Cookbook, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.