tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: change ifmedia word from int to uint64_t




> On Apr 18, 2019, at 6:52 AM, Jason Thorpe <thorpej%me.com@localhost> wrote:
> 
> 
> 
>> On Apr 18, 2019, at 2:32 AM, Masanobu SAITOH <msaitoh%execsw.org@localhost> wrote:
>> 
>> Hi.
>> 
>> I'm now working to extend ifmedia word to be able to support
>> more than 10Gbps media.
>> 
>> Patch:
>> 
>> 	http://www.netbsd.org/~msaitoh/ifmedia64-20190418-0.dif
> 
> It might be nice to use __BIT(), __SHIFT*() etc. macros (if they can do ULL constants)... I think it would make all of the constants a lot easier to read.
> 
> I suppose we could add an ifmword_t ... but if we have to enlarge it again, it's going to become a struct (or something else entirely), right?  I guess it makes the "grep" phase of the next overhaul a little easier :-)

Also:

Index: sys/sys/sockio.h
===================================================================
RCS file: /cvsroot/src/sys/sys/sockio.h,v
retrieving revision 1.36
diff -u -p -r1.36 sockio.h
--- sys/sys/sockio.h	21 Dec 2018 08:58:08 -0000	1.36
+++ sys/sys/sockio.h	18 Apr 2019 09:12:46 -0000
@@ -90,8 +90,9 @@
 #define	SIOCGETVIFCNT	_IOWR('u', 51, struct sioc_vif_req)/* vif pkt cnt */
 #define	SIOCGETSGCNT	_IOWR('u', 52, struct sioc_sg_req) /* sg pkt cnt */
 
-#define	SIOCSIFMEDIA	_IOWR('i', 53, struct ifreq)	/* set net media */
-#define	SIOCGIFMEDIA	_IOWR('i', 54, struct ifmediareq) /* get net media */
+/* 53 and 54 used to be SIOC[SG]IFMEDIA with a 32 bit media word */
+#define	SIOCSIFMEDIA	_IOWR('i', 55, struct ifreq)	/* set net media */
+#define	SIOCGIFMEDIA	_IOWR('i', 56, struct ifmediareq) /* get net media */
 
 #define	SIOCSIFGENERIC	 _IOW('i', 57, struct ifreq)	/* generic IF set op */
 #define	SIOCGIFGENERIC	_IOWR('i', 58, struct ifreq)	/* generic IF get op */

You don't have to allocate new numbers; the size of the argument structure changes, and therefore the value of SIOCSIFMEDIA / SIOCGIFMEDIA changes.


> 
>> 
>> I changed ifmedia's word from int to uint64_t. It's almost the
>> same as OpenBSD who did 5 years ago.
>> 
>> What do you think about the above diff?
>> IMHO, it would be better to change ifmword_t(with uint64_t)
>> than uint64_t. For example
>> 
>> (from ifconfig/media.c's diff)
>>> @@ -374,7 +374,8 @@ media_status(prop_dictionary_t env, prop
>>> 	/* Interface link status is queried through SIOCGIFMEDIA.
>>> 	 * Not all interfaces have actual media. */
>>> 	if (ifmr.ifm_count != 0) {
>>> -		media_list = (int *)malloc(ifmr.ifm_count * sizeof(int));
>>> +		media_list = (uint64_t *)malloc(ifmr.ifm_count
>>> +		    * sizeof(*media_list));
>>> 		if (media_list == NULL)
>>> 			err(EXIT_FAILURE, "malloc");
>>> 		ifmr.ifm_ulist = media_list;
>> 
>> If we use ifmword_t, it makes easy to change the size in future.
>> 
>> 
>> This patch has some TODOs:
>> 
>> - COMPAT_NETBSD32? (currently i386 old binary doesn't work on
>>  amd64)
>> - I would change the hook point. Current location is not good
>>  because we have to add "case: OSIOC[GS]IFMEDIA" to all driver
>>  which calls ifmedia_ioctl(). (see if_wm.c's patch)
>> 
>> 
>> Thanks.
>> 
>> -- 
>> -----------------------------------------------
>>               SAITOH Masanobu (msaitoh%execsw.org@localhost
>>                                msaitoh%netbsd.org@localhost)
> 
> -- thorpej

-- thorpej



Home | Main Index | Thread Index | Old Index