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]-"; } print "@output_bytes[$#input_bytes] "; sub usage( ) { print "usage: eth-tok-mac.pl "; print " where is in the form HH:HH:HH:HH:HH:HH "; print " or HH-HH-HH-HH-HH-HH or HHHH.HHHH.HHHH print " (H is a hex number 0-F) "; print "The output is the converted MAC address. "; print "Note that this conversion is exactly the same whether converting "; print "from Ethernet to Token Ring or Token Ring to Ethernet. "; exit; } |
The program is run as follows:
$ eth-tok-mac.pl 00-00-0c-f0-84-60 the resulting MAC is: 00-00-30-0f-21-06
Discussion
Token Ring uses a convention of most significant bit first when writing a byte. Ethernet, on the other hand, puts the least significant bit first. So when a bridge connects these two media, the MAC addresses of devices on the Ethernet side will look unfamiliar when viewed from the Token Ring side, and vice versa. The rule for converting from one to the other is relatively simple, however, because it just reflects this reversing of the bit ordering.
Table 15-3 shows how the conversion algorithm works.
Token Ring | Ethernet | ||||
---|---|---|---|---|---|
Hex | Decimal | Binary | Binary | Decimal | Hex |
0 | 0 | 0000 | 0000 | 0 | 0 |
1 | 1 | 0001 | 1000 | 8 | 8 |
2 | 2 | 0010 | 0100 | 4 | 4 |
3 | 3 | 0011 | 1100 | 12 | C |
4 | 4 | 0100 | 0010 | 2 | 2 |
5 | 5 | 0101 | 1010 | 10 | A |
6 | 6 | 0110 | 0110 | 6 | 6 |
7 | 7 | 0111 | 1110 | 14 | E |
8 | 8 | 1000 | 0001 | 1 | 1 |
9 | 9 | 1001 | 1001 | 9 | 9 |
A | 10 | 1010 | 0101 | 5 | 5 |
B | 11 | 1011 | 1101 | 13 | D |
C | 12 | 1100 | 0011 | 3 | 3 |
D | 13 | 1101 | 1011 | 11 | B |
E | 14 | 1110 | 0111 | 7 | 7 |
F | 15 | 1111 | 1111 | 15 | F |
This table converts each individual hex character in a MAC address, but there is more to it than this because a byte is eight bits long, not four bits like a hex character.
Suppose the Ethernet address is 0000.0cf0.8460. The third byte of this address is 0c. To figure out how this byte will look on the Token Ring side of the bridge, you first switch the two hex characters to get c0. Then convert each of these characters by using Table 15-1. The c becomes 3 and the 0 stays the same, giving a final value of 30. So converting the entire address similarly gives 00-00-30-0f-21-06.
The script provides an automated way to do these translations. If the 8 bits in a byte are numbered from 18, this algorithm simply flips the order so that they appear from 81. This is clearly identical to the inverse translation where the bit order is converted from 81 to 18. So both the script and the above manual technique work identically when converting Ethernet addresses to Token Ring or Token Ring addresses to Ethernet.
See Also
Recipe 15.3
Router Configuration and File Management
Router Management
User Access and Privilege Levels
TACACS+
IP Routing
RIP
EIGRP
OSPF
BGP
Frame Relay
Handling Queuing and Congestion
Tunnels and VPNs
Dial Backup
NTP and Time
DLSw
Router Interfaces and Media
Simple Network Management Protocol
Logging
Access-Lists
DHCP
NAT
First Hop Redundancy Protocols
IP Multicast
IP Mobility
IPv6
MPLS
Security
Appendix 1. External Software Packages
Appendix 2. IP Precedence, TOS, and DSCP Classifications
Index