# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
def inet_hwton(hw_addr):
"""Converts a representation of an Ethernet address to its packed format.
@param hw_addr: A string representing an Ethernet address in hex format like
"BA:C0:11:C0:FF:EE", "BAC011C0FFEE" or already in its binary representation.
@return: The 6-byte binary form of the provided Ethernet address.
"""
if len(hw_addr) == 6: # Already in network format.
return hw_addr
if len(hw_addr) == 12: # Hex format without : in between.
return ''.join(chr(int(hw_addr[i:i + 2], 16)) for i in range(0, 12, 2))
if len(hw_addr) == 17: # Hex format with : in between.
return ''.join(chr(int(hw_addr[i:i + 2], 16)) for i in range(0, 17, 3))
def inet_ntohw(packed_hw_addr):
"""Converts a binary packed Ethernet address to its hex representation.
@param packed_hw_addr: The 6-byte binary form of the provided Ethernet
address.
@return: The hex representation as in "AA:BB:CC:00:11:22".
"""
return '%.2X:%.2X:%.2X:%.2X:%.2X:%.2X' % tuple(map(ord, packed_hw_addr))