# 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))