152d2369aSRobert Mustacchi.\" 252d2369aSRobert Mustacchi.\" This file and its contents are supplied under the terms of the 352d2369aSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0. 452d2369aSRobert Mustacchi.\" You may only use this file in accordance with the terms of version 552d2369aSRobert Mustacchi.\" 1.0 of the CDDL. 652d2369aSRobert Mustacchi.\" 752d2369aSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this 852d2369aSRobert Mustacchi.\" source. A copy of the CDDL is also available via the Internet at 952d2369aSRobert Mustacchi.\" http://www.illumos.org/license/CDDL. 1052d2369aSRobert Mustacchi.\" 1152d2369aSRobert Mustacchi.\" 12*2c0ebdeeSRobert Mustacchi.\" Copyright (c) 2017, Joyent, Inc. 13*2c0ebdeeSRobert Mustacchi.\" Copyright 2022 Oxide Computer Company 1452d2369aSRobert Mustacchi.\" 15*2c0ebdeeSRobert Mustacchi.Dd July 2, 2022 1652d2369aSRobert Mustacchi.Dt MAC_CALLBACKS 9S 1752d2369aSRobert Mustacchi.Os 1852d2369aSRobert Mustacchi.Sh NAME 1952d2369aSRobert Mustacchi.Nm mac_callbacks , 2052d2369aSRobert Mustacchi.Nm mac_callbacks_t 2152d2369aSRobert Mustacchi.Nd networking device driver entry points structure 2252d2369aSRobert Mustacchi.Sh SYNOPSIS 2352d2369aSRobert Mustacchi.In sys/mac_provider.h 2452d2369aSRobert Mustacchi.Sh INTERFACE LEVEL 2552d2369aSRobert Mustacchiillumos DDI specific 2652d2369aSRobert Mustacchi.Sh DESCRIPTION 2752d2369aSRobert MustacchiThe 2852d2369aSRobert Mustacchi.Sy mac_callbacks 29*2c0ebdeeSRobert Mustacchistructure is used by GLDv3 networking device drivers implementing and 30*2c0ebdeeSRobert Mustacchiusing the 3152d2369aSRobert Mustacchi.Xr mac 9E 32*2c0ebdeeSRobert Mustacchiframework and interfaces. 3352d2369aSRobert Mustacchi.Pp 3452d2369aSRobert MustacchiThe structure is normally allocated statically by drivers as a single 3572d3dbb9SYuri Pankovglobal entry. 3672d3dbb9SYuri PankovA pointer to it is passed as the 37*2c0ebdeeSRobert Mustacchi.Fa m_callbacks 3852d2369aSRobert Mustacchimember of the 39*2c0ebdeeSRobert Mustacchi.Vt mac_register_t 4052d2369aSRobert Mustacchistructure. 4152d2369aSRobert Mustacchi.Sh TYPES 4252d2369aSRobert MustacchiThe following types define the function pointers in use in the 43*2c0ebdeeSRobert Mustacchi.Vt mac_register_t . 4452d2369aSRobert Mustacchi.Bd -literal -offset indent 4552d2369aSRobert Mustacchitypedef int (*mac_getstat_t)(void *, uint_t, uint64_t *); 4652d2369aSRobert Mustacchitypedef int (*mac_start_t)(void *); 4752d2369aSRobert Mustacchitypedef void (*mac_stop_t)(void *); 4852d2369aSRobert Mustacchitypedef int (*mac_setpromisc_t)(void *, boolean_t); 4952d2369aSRobert Mustacchitypedef int (*mac_multicst_t)(void *, boolean_t, const uint8_t *); 5052d2369aSRobert Mustacchitypedef int (*mac_unicst_t)(void *, const uint8_t *); 5152d2369aSRobert Mustacchitypedef void (*mac_ioctl_t)(void *, queue_t *, mblk_t *); 5252d2369aSRobert Mustacchitypedef void (*mac_resources_t)(void *); 5352d2369aSRobert Mustacchitypedef mblk_t *(*mac_tx_t)(void *, mblk_t *); 5452d2369aSRobert Mustacchitypedef boolean_t (*mac_getcapab_t)(void *, mac_capab_t, void *); 5552d2369aSRobert Mustacchitypedef int (*mac_open_t)(void *); 5652d2369aSRobert Mustacchitypedef void (*mac_close_t)(void *); 5752d2369aSRobert Mustacchitypedef int (*mac_set_prop_t)(void *, const char *, mac_prop_id_t, 5852d2369aSRobert Mustacchi uint_t, const void *); 5952d2369aSRobert Mustacchitypedef int (*mac_get_prop_t)(void *, const char *, mac_prop_id_t, 6052d2369aSRobert Mustacchi uint_t, void *); 6152d2369aSRobert Mustacchitypedef void (*mac_prop_info_t)(void *, const char *, mac_prop_id_t, 6252d2369aSRobert Mustacchi mac_prop_info_handle_t); 6352d2369aSRobert Mustacchi.Ed 6452d2369aSRobert Mustacchi.Sh STRUCTURE MEMBERS 6552d2369aSRobert Mustacchi.Bd -literal -offset indent 6652d2369aSRobert Mustacchiuint_t mc_callbacks; /* Denotes which callbacks are set */ 6752d2369aSRobert Mustacchimac_getstat_t mc_getstat; /* Get the value of a statistic */ 6852d2369aSRobert Mustacchimac_start_t mc_start; /* Start the device */ 6952d2369aSRobert Mustacchimac_stop_t mc_stop; /* Stop the device */ 7052d2369aSRobert Mustacchimac_setpromisc_t mc_setpromisc; /* Enable or disable promiscuous mode */ 7152d2369aSRobert Mustacchimac_multicst_t mc_multicst; /* Enable or disable a multicast addr */ 7252d2369aSRobert Mustacchimac_unicst_t mc_unicst; /* Set the unicast MAC address */ 7352d2369aSRobert Mustacchimac_tx_t mc_tx; /* Transmit a packet */ 7452d2369aSRobert Mustacchivoid *mc_reserved; /* Reserved, do not use */ 7552d2369aSRobert Mustacchimac_ioctl_t mc_ioctl; /* Process an unknown ioctl */ 7652d2369aSRobert Mustacchimac_getcapab_t mc_getcapab; /* Get capability information */ 7752d2369aSRobert Mustacchimac_open_t mc_open; /* Open the device */ 7852d2369aSRobert Mustacchimac_close_t mc_close; /* Close the device */ 7952d2369aSRobert Mustacchimac_set_prop_t mc_setprop; /* Set a device property */ 8052d2369aSRobert Mustacchimac_get_prop_t mc_getprop; /* Get a device property */ 8152d2369aSRobert Mustacchimac_prop_info_t mc_propinfo; /* Get property information */ 8252d2369aSRobert Mustacchi.Ed 8352d2369aSRobert Mustacchi.Pp 8452d2369aSRobert MustacchiThe 85*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 8652d2369aSRobert Mustacchimember is used to denote which of a series of optional callbacks are 8772d3dbb9SYuri Pankovpresent. 8872d3dbb9SYuri PankovThis method allows additional members to be added to the 89*2c0ebdeeSRobert Mustacchi.Vt mac_callbacks_t 9072d3dbb9SYuri Pankovstructure while maintaining ABI compatibility with existing modules. 9172d3dbb9SYuri PankovIf a member is not mentioned below, then it is a part of the base version 9252d2369aSRobert Mustacchiof the structure and device drivers do not need to set anything to 9352d2369aSRobert Mustacchiindicate that it is present. 9452d2369aSRobert MustacchiThe 95*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 9652d2369aSRobert Mustacchimember should be set to the bitwise inclusive OR of the following 9752d2369aSRobert Mustacchipre-processor values: 9852d2369aSRobert Mustacchi.Bl -tag -width Dv -offset indent 99*2c0ebdeeSRobert Mustacchi.It Dv MC_IOCTL 10052d2369aSRobert MustacchiIndicates that the 101*2c0ebdeeSRobert Mustacchi.Fa mc_ioctl 10252d2369aSRobert Mustacchistructure member has been set. 103*2c0ebdeeSRobert Mustacchi.It Dv MC_GETCAPAB 10452d2369aSRobert MustacchiIndicates that the 105*2c0ebdeeSRobert Mustacchi.Fa mc_getcapab 10652d2369aSRobert Mustacchistructure member has been set. 107*2c0ebdeeSRobert Mustacchi.It Dv MC_OPEN 10852d2369aSRobert MustacchiIndicates that the 109*2c0ebdeeSRobert Mustacchi.Fa mc_open 11052d2369aSRobert Mustacchistructure member has been set. 111*2c0ebdeeSRobert Mustacchi.It Dv MC_CLOSE 11252d2369aSRobert MustacchiIndicates that the 113*2c0ebdeeSRobert Mustacchi.Fa mc_close 11452d2369aSRobert Mustacchistructure member has been set. 115*2c0ebdeeSRobert Mustacchi.It Dv MC_SETPROP 11652d2369aSRobert MustacchiIndicates that the 117*2c0ebdeeSRobert Mustacchi.Fa mc_setprop 11852d2369aSRobert Mustacchistructure member has been set. 119*2c0ebdeeSRobert Mustacchi.It Dv MC_GETPROP 12052d2369aSRobert MustacchiIndicates that the 121*2c0ebdeeSRobert Mustacchi.Fa mc_getprop 12252d2369aSRobert Mustacchistructure member has been set. 123*2c0ebdeeSRobert Mustacchi.It Dv MC_PROPINFO 12452d2369aSRobert MustacchiIndicates that the 125*2c0ebdeeSRobert Mustacchi.Fa mc_propinfo 12652d2369aSRobert Mustacchistructure member has been set. 127*2c0ebdeeSRobert Mustacchi.It Dv MC_PROPERTIES 12852d2369aSRobert MustacchiIndicates that the 129*2c0ebdeeSRobert Mustacchi.Fa mc_getprop , 130*2c0ebdeeSRobert Mustacchi.Fa mc_propinfo , 13152d2369aSRobert Mustacchiand 132*2c0ebdeeSRobert Mustacchi.Fa mc_setprop 13352d2369aSRobert Mustacchistructure members have been set. 13452d2369aSRobert Mustacchi.El 13552d2369aSRobert Mustacchi.Pp 13652d2369aSRobert MustacchiThe 137*2c0ebdeeSRobert Mustacchi.Fa mc_getstat 13852d2369aSRobert Mustacchifunction defines an entry point used to receive statistics about the 13972d3dbb9SYuri Pankovdevice. 14072d3dbb9SYuri PankovA list of statistics that it is required to support is available in 14152d2369aSRobert Mustacchi.Xr mac 9E . 14252d2369aSRobert MustacchiFor more information on the requirements of the function, see 14352d2369aSRobert Mustacchi.Xr mc_getstat 9E . 14452d2369aSRobert Mustacchi.Pp 14552d2369aSRobert MustacchiThe 146*2c0ebdeeSRobert Mustacchi.Fa mc_start 14772d3dbb9SYuri Pankovmember defines an entry point that is used to start the device. 14872d3dbb9SYuri PankovFor more information on the requirements of the function, see 14952d2369aSRobert Mustacchi.Xr mc_start 9E . 15052d2369aSRobert Mustacchi.Pp 15152d2369aSRobert MustacchiThe 152*2c0ebdeeSRobert Mustacchi.Fa mc_stop 15372d3dbb9SYuri Pankovmember defines an entry point that is used to stop the device. 15472d3dbb9SYuri PankovIt is the opposite of the 155*2c0ebdeeSRobert Mustacchi.Fa mc_start 15672d3dbb9SYuri Pankovmember. 15772d3dbb9SYuri PankovFor more information on the requirements of the function, see 15852d2369aSRobert Mustacchi.Xr mc_stop 9E . 15952d2369aSRobert Mustacchi.Pp 16052d2369aSRobert MustacchiThe 161*2c0ebdeeSRobert Mustacchi.Fa mc_setpromisc 16272d3dbb9SYuri Pankovmember is used to enable and disable promiscuous mode on the device. 16372d3dbb9SYuri PankovFor more information on the requirements of the function, see 16452d2369aSRobert Mustacchi.Xr mc_setpromisc 9E . 16552d2369aSRobert Mustacchi.Pp 16652d2369aSRobert MustacchiThe 167*2c0ebdeeSRobert Mustacchi.Fa mc_multicst 16852d2369aSRobert Mustacchimember is used to enable or disable multicast addresses in the device's 16972d3dbb9SYuri Pankovfilters. 17072d3dbb9SYuri PankovFor more information on the requirements of the function, see 17152d2369aSRobert Mustacchi.Xr mc_multicst 9E . 17252d2369aSRobert Mustacchi.Pp 17352d2369aSRobert MustacchiThe 174*2c0ebdeeSRobert Mustacchi.Fa mc_unicst 17552d2369aSRobert Mustacchimember is used to set the primary unicast MAC address of the device. 17652d2369aSRobert MustacchiFor more information on the requirements of the function, see 17752d2369aSRobert Mustacchi.Xr mc_unicst 9E . 17852d2369aSRobert Mustacchi.Pp 17952d2369aSRobert MustacchiThe 180*2c0ebdeeSRobert Mustacchi.Fa mc_tx 18172d3dbb9SYuri Pankovmember is used to transmit a single message on the wire. 18272d3dbb9SYuri PankovFor more information on the requirements of the function, see 18352d2369aSRobert Mustacchi.Xr mc_tx 9E . 18452d2369aSRobert Mustacchi.Pp 18552d2369aSRobert MustacchiThe 186*2c0ebdeeSRobert Mustacchi.Fa mc_ioctl 18772d3dbb9SYuri Pankovmember is used to process device specific ioctls. 188*2c0ebdeeSRobert MustacchiThe MAC framework does not define any ioctls that devices should handle; 189*2c0ebdeeSRobert Mustacchihowever, there may be private ioctls for this device. 19072d3dbb9SYuri PankovThis entry point is optional. 19172d3dbb9SYuri PankovFor it to be considered, the 192*2c0ebdeeSRobert Mustacchi.Dv MC_IOCTL 19352d2369aSRobert Mustacchivalue must be present in the 194*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 19572d3dbb9SYuri Pankovmember. 19672d3dbb9SYuri PankovFor more information on the requirements of the function, see 19752d2369aSRobert Mustacchi.Xr mc_ioctl 9E . 19852d2369aSRobert Mustacchi.Pp 19952d2369aSRobert MustacchiThe 200*2c0ebdeeSRobert Mustacchi.Fa mc_getcapab 20172d3dbb9SYuri Pankovmember is used to determine device capabilities. 20272d3dbb9SYuri PankovEach capability has its own data and semantics associated with it. 20372d3dbb9SYuri PankovA list of capabilities is provided in 20452d2369aSRobert Mustacchi.Xr mac 9E . 20572d3dbb9SYuri PankovThis entry point is optional. 20672d3dbb9SYuri PankovFor it to be used, the 207*2c0ebdeeSRobert Mustacchi.Dv MC_GETCAPAB 20852d2369aSRobert Mustacchivalue must be present in the 209*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 21072d3dbb9SYuri Pankovmember. 21172d3dbb9SYuri PankovFor more information on the requirements of the function, see 21252d2369aSRobert Mustacchi.Xr mc_getcapab 9E . 21352d2369aSRobert Mustacchi.Pp 21452d2369aSRobert MustacchiThe 215*2c0ebdeeSRobert Mustacchi.Fa mc_open 21652d2369aSRobert Mustacchimember is used to provide specific actions to take when the device is 21772d3dbb9SYuri Pankovopened. 21872d3dbb9SYuri PankovNote that most device drivers will not have a need to implement this. 21972d3dbb9SYuri PankovIt is not required for this function to be implemented for this device to be 22072d3dbb9SYuri Pankovused with 221bbf21555SRichard Lowe.Xr dlpi 4P . 22272d3dbb9SYuri PankovThis entry point is optional. 22372d3dbb9SYuri PankovFor it to be used, the 224*2c0ebdeeSRobert Mustacchi.Dv MC_OPEN 22552d2369aSRobert Mustacchivalue must be present in the 226*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 22772d3dbb9SYuri Pankovmember. 22872d3dbb9SYuri PankovFor more information on the requirements of the function, see 22952d2369aSRobert Mustacchi.Xr mc_open 9E . 23052d2369aSRobert Mustacchi.Pp 23152d2369aSRobert MustacchiThe 232*2c0ebdeeSRobert Mustacchi.Fa mc_close 23352d2369aSRobert Mustacchimember is used to provide specific actions to take when the device is 23472d3dbb9SYuri Pankovclosed. 23572d3dbb9SYuri PankovNote that most device drivers will not have a need to implement this. 23672d3dbb9SYuri PankovIt is not required for this function to be implemented for this device to be 23772d3dbb9SYuri Pankovused with 238bbf21555SRichard Lowe.Xr dlpi 4P . 23972d3dbb9SYuri PankovThis entry point is optional. 24072d3dbb9SYuri PankovFor it to be used, the 241*2c0ebdeeSRobert Mustacchi.Dv MC_CLOSE 24252d2369aSRobert Mustacchivalue must be present in the 243*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 24472d3dbb9SYuri Pankovmember. 24572d3dbb9SYuri PankovFor more information on the requirements of the function, see 24652d2369aSRobert Mustacchi.Xr mc_close 9E . 24752d2369aSRobert Mustacchi.Pp 24852d2369aSRobert MustacchiThe 249*2c0ebdeeSRobert Mustacchi.Fa mc_getprop 25072d3dbb9SYuri Pankovmember is used to get the current value of a property from the device. 25172d3dbb9SYuri PankovA list of properties, their sizes, and their interpretation is available in 25252d2369aSRobert Mustacchi.Xr mac 9E . 25372d3dbb9SYuri PankovThis entry point is optional. 25472d3dbb9SYuri PankovFor it to be used, the 255*2c0ebdeeSRobert Mustacchi.Dv MC_GETPROP 25652d2369aSRobert Mustacchivalue must be present in the 257*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 25872d3dbb9SYuri Pankovmember. 25972d3dbb9SYuri PankovFor more information on the requirements of the function, see 26052d2369aSRobert Mustacchi.Xr mc_getprop 9E . 26152d2369aSRobert Mustacchi.Pp 26252d2369aSRobert MustacchiThe 263*2c0ebdeeSRobert Mustacchi.Fa mc_setprop 26472d3dbb9SYuri Pankovmember is used to set the value of a device property. 26572d3dbb9SYuri PankovA list of properties, their sizes, and their interpretation is available in 26652d2369aSRobert Mustacchi.Xr mac 9E . 26772d3dbb9SYuri PankovThis entry point is optional. 26872d3dbb9SYuri PankovFor it to be used, the 269*2c0ebdeeSRobert Mustacchi.Dv MC_SETPROP 27052d2369aSRobert Mustacchivalue must be present in the 271*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 27272d3dbb9SYuri Pankovmember. 27372d3dbb9SYuri PankovFor more information on the requirements of the function, see 27452d2369aSRobert Mustacchi.Xr mc_setprop 9E . 27552d2369aSRobert Mustacchi.Pp 27652d2369aSRobert MustacchiThe 277*2c0ebdeeSRobert Mustacchi.Fa mc_propinfo 27852d2369aSRobert Mustacchimember is used to obtain metadata about a property such as its default 27972d3dbb9SYuri Pankovvalue, whether or not it is writable, and more. 28072d3dbb9SYuri PankovA list of properties, their sizes, and their interpretation is available in 28152d2369aSRobert Mustacchi.Xr mac 9E . 28272d3dbb9SYuri PankovThis entry point is optional. 28372d3dbb9SYuri PankovFor it to be used, the 284*2c0ebdeeSRobert Mustacchi.Dv MC_PROPINFO 28552d2369aSRobert Mustacchivalue must be present in the 286*2c0ebdeeSRobert Mustacchi.Fa mc_callbacks 28772d3dbb9SYuri Pankovmember. 28872d3dbb9SYuri PankovFor more information on the requirements of the function, see 28952d2369aSRobert Mustacchi.Xr mc_propinfo 9E . 29052d2369aSRobert Mustacchi.Ss Required Members 29152d2369aSRobert MustacchiMany members in the structure are optional; however, the following 29252d2369aSRobert Mustacchimembers must be set or a call to 29352d2369aSRobert Mustacchi.Xr mac_register 9F 29452d2369aSRobert Mustacchiwill fail. 29552d2369aSRobert Mustacchi.Bl -bullet -offset indent 29652d2369aSRobert Mustacchi.It 297*2c0ebdeeSRobert Mustacchi.Fa mc_getstat 29852d2369aSRobert Mustacchi.It 299*2c0ebdeeSRobert Mustacchi.Fa mc_start 30052d2369aSRobert Mustacchi.It 301*2c0ebdeeSRobert Mustacchi.Fa mc_stop 30252d2369aSRobert Mustacchi.It 303*2c0ebdeeSRobert Mustacchi.Fa mc_setpromisc 30452d2369aSRobert Mustacchi.It 305*2c0ebdeeSRobert Mustacchi.Fa mc_multicst 30652d2369aSRobert Mustacchi.It 307*2c0ebdeeSRobert Mustacchi.Fa mc_tx 30852d2369aSRobert Mustacchi.It 309*2c0ebdeeSRobert Mustacchi.Fa mc_unicst 31052d2369aSRobert Mustacchi.El 31152d2369aSRobert Mustacchi.Pp 312*2c0ebdeeSRobert MustacchiDevices which implement the 313*2c0ebdeeSRobert Mustacchi.Dv MAC_CAPAB_RINGS 314*2c0ebdeeSRobert Mustacchicapability for receive rings must not implement the 315*2c0ebdeeSRobert Mustacchi.Fa mc_unicst 316*2c0ebdeeSRobert Mustacchientry point. 317*2c0ebdeeSRobert MustacchiDevices which implement the 318*2c0ebdeeSRobert Mustacchi.Dv MAC_CAPAB_RINGS 319*2c0ebdeeSRobert Mustacchicapability for transmit rings must not implement the 320*2c0ebdeeSRobert Mustacchi.Fa mc_tx 321*2c0ebdeeSRobert Mustacchientry points. 322*2c0ebdeeSRobert MustacchiFor more information about the capability, please see 323*2c0ebdeeSRobert Mustacchi.Xr mac_capab_rings 9E . 32452d2369aSRobert Mustacchi.Pp 32552d2369aSRobert MustacchiGenerally, a device that implements one of 326*2c0ebdeeSRobert Mustacchi.Fa mc_getprop , 327*2c0ebdeeSRobert Mustacchi.Fa mc_setprop , 32852d2369aSRobert Mustacchior 329*2c0ebdeeSRobert Mustacchi.Fa mc_propinfo 33052d2369aSRobert Mustacchiwill want to implement all three endpoints to ensure that the property 33152d2369aSRobert Mustacchiis fully integrated into user land utilities such as 332bbf21555SRichard Lowe.Xr dladm 8 . 33352d2369aSRobert Mustacchi.Sh SEE ALSO 334bbf21555SRichard Lowe.Xr dlpi 4P , 335bbf21555SRichard Lowe.Xr dladm 8 , 33652d2369aSRobert Mustacchi.Xr mac 9E , 337*2c0ebdeeSRobert Mustacchi.Xr mac_capab_rings 9E , 33852d2369aSRobert Mustacchi.Xr mc_close 9E , 33952d2369aSRobert Mustacchi.Xr mc_getcapab 9E , 34052d2369aSRobert Mustacchi.Xr mc_getprop 9E , 34152d2369aSRobert Mustacchi.Xr mc_getstat 9E , 34252d2369aSRobert Mustacchi.Xr mc_ioctl 9E , 34352d2369aSRobert Mustacchi.Xr mc_multicst 9E , 34452d2369aSRobert Mustacchi.Xr mc_open 9E , 34552d2369aSRobert Mustacchi.Xr mc_propinfo 9E , 34652d2369aSRobert Mustacchi.Xr mc_setpromisc 9E , 34752d2369aSRobert Mustacchi.Xr mc_setprop 9E , 34852d2369aSRobert Mustacchi.Xr mc_start 9E , 34952d2369aSRobert Mustacchi.Xr mc_stop 9E , 35052d2369aSRobert Mustacchi.Xr mc_tx 9E , 35152d2369aSRobert Mustacchi.Xr mc_unicst 9E , 352*2c0ebdeeSRobert Mustacchi.Xr mac_register 9F , 35352d2369aSRobert Mustacchi.Xr mac_register 9S 354