'Unpack a raw ethernet frame.
Returns:
None on error
{ \'dst\' : byte string,
\'src\' : byte string,
\'proto\' : short in host byte order,
\'payload\' : byte string'

@staticmethod
def unpack(raw_frame):

    packet_len = len(raw_frame)
    if (packet_len < ethernet.HDR_LEN):
        return None
    payload_len = (packet_len - ethernet.HDR_LEN)
    frame = {}
    (frame[ethernet.FRAME_KEY_DST_MAC], frame[ethernet.FRAME_KEY_SRC_MAC], frame[ethernet.FRAME_KEY_PROTO]) = struct.unpack('!6s6sH', raw_frame[:ethernet.HDR_LEN])
    frame[ethernet.FRAME_KEY_PAYLOAD] = raw_frame[ethernet.HDR_LEN:(ethernet.HDR_LEN + payload_len)]
    return frame
