Share

TLAN Driver for Linux

Tracker: Bugs

5 Promiscuous mode overridden on link (re)activation - ID: 1198138
Last Update: Tracker Item Submitted ( nobody )

My understanding of the operation of the TLAN interface is:




The driver is initiated and starts autonegotiation
(TLan_PhyStartLink).


At some point later autonegotiation completes
(TLan_PhyFinishAutoNeg) and the link becomes active
(TLan_FinishReset).




In TLan_FinishReset TLAN_NET_CMD is set - based on
TLAN_NET_CMD_NRESET, TLAN_NET_CMD_NWRAP
and whether the link is half/full duplex.




The TLAN_NET_CMD in TLan_FinishReset does not take
account of the original state of TLAN_NET_CMD - in
particular the state of TLAN_NET_CMD_CAF.




This means that if the interface is set to promiscuous mode
during the time between initiation and the completion of
autonegotiation, it will revert to non-promiscuous mode
when the link becomes active.




It also means that if the link goes inactive and then active
again (cable disconnect or network down) promiscuous
mode will be lost.




This problem manifests itself when using the interface for
ethernet bridging ? using the bridge (http://bridge.
sourceforge.net/) module.




To solve this problem I think that the first few lines of
TLan_FinishReset should become something like:




phy = priv->phy[priv->phyNum];




data = TLAN_NET_CMD_NRESET |
TLAN_NET_CMD_NWRAP;


if ( priv->tlanFullDuplex ) {


data |= TLAN_NET_CMD_DUPLEX;


}


if ( dev->flags & IFF_PROMISC ) { /* new test
for promiscuous flag */


data |= TLAN_NET_CMD_CAF; /* or in
the promiscuity mode bit */


}


TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD,
data );



Nobody/Anonymous ( nobody ) - 2005-05-09 09:37

5

Open

None

Nobody/Anonymous

None

None

Public


Comments




Log in to comment.

No follow-up comments have been posted.

Attached File

No Files Currently Attached

Change

No changes have been made to this artifact.