'Prepares fdb_entries from JSON.
All methods in this class that receive messages should call this to
unmarshall fdb_entries from the wire.
:param fdb_entries: Original fdb_entries data-structure.  Looks like:
<uuid>: {
\'ports\': {
<ip address>: [ [<mac>, <ip>], ...  ],
Or in the case of an update:
{ \'chg_ip\': {
\'<uuid>\': {
\'<agent1-IP>\': {
\'before\': [ [<mac>, <ip>], ... ],
\'after\' : [ [<mac>, <ip>], ... ],
\'<agent2-IP>\': {
\'before\': ...
:returns: Deep copy with [<mac>, <ip>] converted to PortInfo'

@staticmethod
def _unmarshall_fdb_entries(fdb_entries):

    unmarshalled = dict(fdb_entries)
    chg_ip_nets = [net.values() for net in unmarshalled.get('chg_ip', {}).values()]
    for agent in itertools.chain.from_iterable(chg_ip_nets):
        for when in ('before', 'after'):
            if (when in agent):
                agent[when] = [l2pop_rpc.PortInfo(*pi) for pi in agent[when]]
    for value in unmarshalled.values():
        if ('ports' in value):
            value['ports'] = dict(((address, [l2pop_rpc.PortInfo(*pi) for pi in port_infos]) for (address, port_infos) in value['ports'].items()))
    return unmarshalled
