public function linkTopology( $devices = null )
    {
        if( $devices == null )
            $devices = $this->crawl();

        $links = array();
        foreach( $devices as $feDevice => $feNeighbours )
        {
            foreach( $feNeighbours as $fe2Device => $fe2Links )
            {
                foreach( $fe2Links as $fe2Link )
                {
                    // have we already accounted for this link on the other side?
                    if( isset( $links[ $fe2Device ][ $feDevice ][ $fe2Link['remotePort'] ] ) )
                        continue;

                    if( !isset( $links[ $feDevice ] ) )
                        $links[ $feDevice ] = array();

                    if( !isset( $links[ $feDevice ][ $fe2Device ] ) )
                        $links[ $feDevice ][ $fe2Device ] = array();

                    $links[ $feDevice ][ $fe2Device ][ $fe2Link['localPort'] ] = array();

                    foreach( $fe2Link as $k => $v )
                        $links[ $feDevice ][ $fe2Device ][ $fe2Link['localPort'] ][ $k ]   = $v;
                }
            }
        }

        return $links;
    }