src_buf = &info32;\r
buf_len = sizeof(info32);\r
\r
+ if( !p_adapter->p_viport ||\r
+ !p_adapter->p_currentPath->carrier )\r
+ {\r
+ status = NDIS_STATUS_NOT_ACCEPTED;\r
+ goto complete;\r
+ }\r
+\r
switch( oid )\r
{\r
/* Required General */\r
("received query for OID_GEN_TRANSMIT_BUFFER_SPACE\n") );\r
if ( !p_adapter->p_currentPath->carrier )\r
{\r
- p_adapter->pending_query = TRUE;\r
- p_adapter->query_oid = oid_info;\r
-\r
- VNIC_TRACE( VNIC_DBG_OID,\r
- ("returning NDIS_STATUS_PENDING\n") );\r
- status = NDIS_STATUS_PENDING;\r
+ status= NDIS_STATUS_NOT_ACCEPTED;\r
}\r
else\r
{\r
"or OID_GEN_RECEIVE_BUFFER_SPACE\n") );\r
if ( !p_adapter->p_currentPath->carrier )\r
{\r
- p_adapter->pending_query = TRUE;\r
- p_adapter->query_oid = oid_info;\r
-\r
- VNIC_TRACE( VNIC_DBG_OID,\r
- ("returning NDIS_STATUS_PENDING\n") );\r
- status = NDIS_STATUS_PENDING;\r
+ status = NDIS_STATUS_NOT_ACCEPTED;\r
}\r
else\r
{\r
VNIC_TRACE( VNIC_DBG_OID,\r
(" received query for OID_GEN_RCV_NO_BUFFER\n" ) );\r
info32 = 0;\r
- status = NDIS_STATUS_SUCCESS;\r
break;\r
\r
case OID_GEN_DIRECTED_BYTES_XMIT:\r
{\r
info32 = 0;\r
}\r
-\r
else\r
{\r
info64 = p_adapter->p_viport->stats.ifInMulticastPkts;\r
(" received query for OID_802_3_CURRENT_ADDRESS\n" ) );\r
}\r
#endif /* defined( _DEBUG_ )*/\r
+ if( !p_adapter->p_viport ||\r
+ p_adapter->p_viport->errored ||\r
+ p_adapter->p_viport->disconnect )\r
+ {\r
+ status = NDIS_STATUS_NOT_ACCEPTED;\r
+ break;\r
+ }\r
if ( !p_adapter->macSet )\r
{\r
p_adapter->pending_query = TRUE;\r
* Note that this requires the QueryInformation entry point to always\r
* return NDIS_STATUS_PENDING\r
*/\r
+complete:\r
if( status != NDIS_STATUS_PENDING )\r
{\r
_vnic_complete_query(\r
IN UINT num_packets )\r
{\r
vnic_adapter_t* const p_adapter =(vnic_adapter_t* const )adapter_context;\r
- viport_t *p_viport = p_adapter->p_viport;\r
UINT packet_num;\r
\r
VNIC_ENTER( VNIC_DBG_SEND );\r
\r
CL_ASSERT( adapter_context );\r
- CL_ASSERT( p_viport );\r
\r
for( packet_num = 0; packet_num < num_packets; ++packet_num )\r
{\r
* Set the status depending on our state. Fail OID requests that\r
* are pending while we reset the adapter.\r
*/\r
+ if( !p_adapter->p_viport ||\r
+ p_adapter->p_viport->disconnect == TRUE ||\r
+ p_adapter->p_viport->errored == TRUE )\r
+ {\r
+ status = NDIS_STATUS_NOT_ACCEPTED;\r
+ }\r
+\r
switch( p_adapter->pnp_state )\r
{\r
case IB_PNP_IOC_ADD:\r
{\r
case OID_802_3_CURRENT_ADDRESS:\r
case OID_802_3_PERMANENT_ADDRESS:\r
- cl_memcpy( mac, p_adapter->p_viport->hwMacAddress, HW_ADDR_LEN );\r
+ if ( status == NDIS_STATUS_SUCCESS )\r
+ {\r
+ cl_memcpy( mac, p_adapter->p_viport->hwMacAddress, HW_ADDR_LEN );\r
+ }\r
_vnic_complete_query( p_adapter,\r
&query_oid,\r
status,\r
\r
ASSERT( (p_adapter->p_viport->updates & ~MCAST_OVERFLOW) == 0 );\r
\r
- if( pkt_filter == 0 )\r
- { /* gateway will disable forwarding for associated viport */\r
- p_adapter->p_viport->newFlags &= ~INIC_FLAG_ENABLE_NIC;\r
+ if( !( p_adapter->p_viport->flags & INIC_FLAG_ENABLE_NIC ) )\r
+ {\r
+ p_adapter->p_viport->newFlags &= ~INIC_FLAG_DISABLE_NIC;\r
+ p_adapter->p_viport->newFlags |= INIC_FLAG_ENABLE_NIC;\r
InterlockedOr( &p_adapter->p_viport->updates, NEED_LINK_CONFIG );\r
}\r
- else\r
- {\r
- if( !( p_adapter->p_viport->flags & INIC_FLAG_ENABLE_NIC ) )\r
- {\r
- p_adapter->p_viport->newFlags &= ~INIC_FLAG_DISABLE_NIC;\r
- p_adapter->p_viport->newFlags |= INIC_FLAG_ENABLE_NIC;\r
- InterlockedOr( &p_adapter->p_viport->updates, NEED_LINK_CONFIG );\r
- }\r
\r
- if( pkt_filter & NDIS_PACKET_TYPE_ALL_MULTICAST )\r
+ if( pkt_filter & NDIS_PACKET_TYPE_ALL_MULTICAST )\r
+ {\r
+ if( !( p_adapter->p_viport->flags & INIC_FLAG_ENABLE_MCAST_ALL ) )\r
{\r
- if( !( p_adapter->p_viport->flags & INIC_FLAG_ENABLE_MCAST_ALL ) )\r
- {\r
- p_adapter->p_viport->newFlags |= INIC_FLAG_ENABLE_MCAST_ALL;\r
- // TODO: Shouldn't MCAST_OVERFLOW be a flag bit, not an update bit?\r
- InterlockedOr( &p_adapter->p_viport->updates,\r
+ p_adapter->p_viport->newFlags |= INIC_FLAG_ENABLE_MCAST_ALL;\r
+ // TODO: Shouldn't MCAST_OVERFLOW be a flag bit, not an update bit?\r
+ InterlockedOr( &p_adapter->p_viport->updates,\r
NEED_LINK_CONFIG | MCAST_OVERFLOW );\r
- }\r
}\r
+ }\r
\r
- if ( pkt_filter & NDIS_PACKET_TYPE_PROMISCUOUS )\r
+ if ( pkt_filter & NDIS_PACKET_TYPE_PROMISCUOUS )\r
+ {\r
+ if( !( p_adapter->p_viport->flags & INIC_FLAG_ENABLE_PROMISC ) )\r
{\r
- if( !( p_adapter->p_viport->flags & INIC_FLAG_ENABLE_PROMISC ) )\r
- {\r
- p_adapter->p_viport->newFlags |= INIC_FLAG_ENABLE_PROMISC;\r
- InterlockedOr( &p_adapter->p_viport->updates, NEED_LINK_CONFIG );\r
- }\r
+ p_adapter->p_viport->newFlags |= INIC_FLAG_ENABLE_PROMISC;\r
+ InterlockedOr( &p_adapter->p_viport->updates, NEED_LINK_CONFIG );\r
}\r
}\r
+\r
/* ENABLE NIC, BROADCAST and MULTICAST flags set on start */\r
\r
++p_adapter->pending_set;\r