ifnet_allocate
Declaration
errno_t ifnet_allocate(const struct ifnet_init_params *init, ifnet_t *interface);Parameters
- init:
The initial values for the interface. These values can not be changed after the interface has been allocated.
- interface:
The interface allocated upon success.
Return Value
May return ENOMEM if there is insufficient memory or EEXIST if an interface with the same uniqueid and family has already been allocated and is in use.
Discussion
Allocate an ifnet_t with an initial refcount of 1. Many parts of the stack do not properly refcount the ifnet_t. In order to avoid freeing the ifnet_t while some parts of the stack may contain a reference to it, the ifnet_ts are only recycled, never freed. A unique id is used to try and recycle the same ifnet_t when allocating an interface. For example, for an ethernet interface, the hardware address of the ethernet card is usually used for the uniqueid. If a PC Card is removed and inserted again, if the ethernet address of the PC card is used, the same ifnet_t will be used for the card the second time it is inserted. In the future, when the ifnet_t is correctly refcounted by all of the stack, the interfaces may be freed and the unique ids ignored.
See Also
Network Kernel Extensions
sock_acceptsock_bindsock_closesock_connectsock_getpeernamesock_getsocknamesock_getsockoptsock_gettypesock_inject_data_insock_inject_data_outsock_ioctlsock_isconnectedsock_isnonblockingsock_listensock_receivesock_receivembufsock_sendsock_sendmbufsock_setprivsock_setsockoptsock_shutdownsock_socketsockopt_copyinsockopt_copyoutsockopt_directionsockopt_levelsockopt_namesockopt_valsizeifaddr_addressifaddr_address_familyifaddr_dstaddressifaddr_findbestforaddrifaddr_ifnetifaddr_netmaskifaddr_referenceifaddr_releaseifaddr_withaddrifaddr_withdstaddrifaddr_withnetifaddr_withrouteiflt_attachiflt_detachifmaddr_addressifmaddr_ifnetifmaddr_lladdressifmaddr_referenceifmaddr_releaseifnet_add_multicastifnet_addrlenifnet_attachifnet_attach_protocolifnet_attach_protocol_v2ifnet_baudrateifnet_capabilities_enabledifnet_capabilities_supportedifnet_detachifnet_detach_protocolifnet_eventifnet_familyifnet_find_by_nameifnet_flagsifnet_free_address_listifnet_free_multicast_listifnet_get_address_listifnet_get_address_list_familyifnet_get_link_mib_dataifnet_get_link_mib_data_lengthifnet_get_multicast_listifnet_get_tso_mtuifnet_get_wake_flagsifnet_hdrlenifnet_indexifnet_inputifnet_interface_family_findifnet_ioctlifnet_lastchangeifnet_list_freeifnet_list_getifnet_lladdr_copy_bytesifnet_llbroadcast_copy_bytesifnet_metricifnet_mtuifnet_nameifnet_offloadifnet_outputifnet_output_rawifnet_referenceifnet_releaseifnet_remove_multicastifnet_resolve_multicastifnet_set_addrlenifnet_set_baudrateifnet_set_capabilities_enabledifnet_set_capabilities_supportedifnet_set_flagsifnet_set_hdrlenifnet_set_link_mib_dataifnet_set_lladdrifnet_set_metricifnet_set_mtuifnet_set_offloadifnet_set_promiscuousifnet_set_statifnet_set_tso_mtuifnet_set_wake_flagsifnet_softcifnet_statifnet_stat_incrementifnet_stat_increment_inifnet_stat_increment_outifnet_touch_lastchangeifnet_typeifnet_unit