Home | History | Annotate | Download | only in py
      1 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 
      6 def inet_hwton(hw_addr):
      7     """Converts a representation of an Ethernet address to its packed format.
      8 
      9     @param hw_addr: A string representing an Ethernet address in hex format like
     10     "BA:C0:11:C0:FF:EE", "BAC011C0FFEE" or already in its binary representation.
     11     @return: The 6-byte binary form of the provided Ethernet address.
     12     """
     13     if len(hw_addr) == 6: # Already in network format.
     14         return hw_addr
     15     if len(hw_addr) == 12: # Hex format without : in between.
     16         return ''.join(chr(int(hw_addr[i:i + 2], 16)) for i in range(0, 12, 2))
     17     if len(hw_addr) == 17: # Hex format with : in between.
     18         return ''.join(chr(int(hw_addr[i:i + 2], 16)) for i in range(0, 17, 3))
     19 
     20 
     21 def inet_ntohw(packed_hw_addr):
     22     """Converts a binary packed Ethernet address to its hex representation.
     23 
     24     @param packed_hw_addr: The 6-byte binary form of the provided Ethernet
     25     address.
     26     @return: The hex representation as in "AA:BB:CC:00:11:22".
     27     """
     28     return '%.2X:%.2X:%.2X:%.2X:%.2X:%.2X' % tuple(map(ord, packed_hw_addr))
     29