old_contents: #!/usr/bin/env python3
  #
  # Copyright (c) 2016 Cisco and/or its affiliates.
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at:
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  #
  
  import binascii
  
  
  def mac_pton(s):
      '''Convert MAC address as text to binary'''
      return binascii.unhexlify(s.replace(':', ''))
  
  
  def mac_ntop(binary):
      '''Convert MAC address as binary to text'''
      x = b':'.join(binascii.hexlify(binary)[i:i + 2]
                    for i in range(0, 12, 2))
      return str(x.decode('ascii'))
  
  
  class MACAddress():
      def __init__(self, mac):
          '''MAC Address as a text-string (aa:bb:cc:dd:ee:ff) or 6 bytes'''
          # Of course Python 2 doesn't distinguish str from bytes
          if type(mac) is bytes and len(mac) == 6:
              self.mac_binary = mac
              self.mac_string = mac_ntop(mac)
          else:
              self.mac_binary = mac_pton(mac)
              self.mac_string = mac
  
      @property
      def packed(self):
          return self.mac_binary
  
      def __len__(self):
          return 6
  
      def __str__(self):
          return self.mac_string
  
      def __repr__(self):
          return '%s(%s)' % (self.__class__.__name__, self.mac_string)
  
      def __eq__(self, other):
          if not isinstance(other, MACAddress):
              return NotImplemented
          return self.mac_binary == other.mac_binary
  
      def __ne__(self, other):
          return not self == other
  
      def __hash__(self):
          return hash(self.mac_binary)
  
new_contents: #!/usr/bin/env python3
  #
  # Copyright (c) 2016 Cisco and/or its affiliates.
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at:
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  #
  
  import binascii
  
  
  def mac_pton(s):
      '''Convert MAC address as text to binary'''
      return binascii.unhexlify(s.replace(':', ''))
  
  
  def mac_ntop(binary):
      '''Convert MAC address as binary to text'''
      x = b':'.join(binascii.hexlify(binary)[i:i + 2]
                    for i in range(0, 12, 2))
      return str(x.decode('ascii'))
  
  
  class MACAddress():
      def __init__(self, mac):
          '''MAC Address as a text-string (aa:bb:cc:dd:ee:ff) or 6 bytes'''
          # Of course Python 2 doesn't distinguish str from bytes
          if type(mac) is bytes and len(mac) == 6:
              self.mac_binary = mac
              self.mac_string = mac_ntop(mac)
          else:
              self.mac_binary = mac_pton(mac)
              self.mac_string = mac
  
      @property
      def packed(self):
          return self.mac_binary
  
      def __len__(self):
          return 6
  
      def __str__(self):
          return self.mac_string
  
      def __repr__(self):
          return '%s(%s)' % (self.__class__.__name__, self.mac_string)
  
      def __eq__(self, other):
  
          if not isinstance(other, MACAddress):
              try:
                  # if it looks like a mac address, we'll take it.
                  # (allows for equality with scapy hw-addresses)
                  return self.mac_binary == MACAddress(other).mac_binary
              except Exception:
                  return NotImplemented
          return self.mac_binary == other.mac_binary
  
      def __ne__(self, other):
          return not self == other
  
      def __hash__(self):
          return hash(self.mac_binary)
  
subject: enhance MACAddress() equality