On Fri, Apr 07, 2023 at 04:53:52PM +1000, David Gwynne wrote:
> ethernet interfaces in device trees can have a "label" property which
> is generally used (when it is used) to identify which connector it is on
> the case or something like that. eg, eth2 in the turris omnia device
> tree has 'label = "wan"' on the mvneta interface.
> 
> ive been using labels in the dts recently to help me figure out what
> goes where, so this has been useful to me. if/when we support switches
> (eg mvsw), their ports are often labelled so i'd like to apply this idea
> to them too.
> 
> ok?

I think doing this is OK but I'm not sure if the usage of OF_getprop()
is correct. OF_getprop() uses 'memcpy(buf, data, min(len, buflen));'
to fill the if_description buffer. So if the provided label is larger than
sizeof(ifp->if_description) the description string is no longer NUL
terminated.

> Index: if_dwqe_fdt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/if_dwqe_fdt.c,v
> retrieving revision 1.7
> diff -u -p -r1.7 if_dwqe_fdt.c
> --- if_dwqe_fdt.c     7 Apr 2023 06:33:49 -0000       1.7
> +++ if_dwqe_fdt.c     7 Apr 2023 06:47:11 -0000
> @@ -213,6 +213,10 @@ dwqe_fdt_attach(struct device *parent, s
>               printf("%s: can't establish interrupt\n", sc->sc_dev.dv_xname);
>  
>       ifp = &sc->sc_ac.ac_if;
> +
> +     OF_getprop(faa->fa_node, "label",
> +         ifp->if_description, sizeof(ifp->if_description));
> +
>       sc->sc_ifd.if_node = faa->fa_node;
>       sc->sc_ifd.if_ifp = ifp;
>       if_register(&sc->sc_ifd);
> Index: if_mvneta.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/fdt/if_mvneta.c,v
> retrieving revision 1.29
> diff -u -p -r1.29 if_mvneta.c
> --- if_mvneta.c       3 Apr 2023 01:46:18 -0000       1.29
> +++ if_mvneta.c       7 Apr 2023 06:47:12 -0000
> @@ -810,6 +810,9 @@ mvneta_attach_deferred(struct device *se
>       if_attach(ifp);
>       ether_ifattach(ifp);
>  
> +     OF_getprop(sc->sc_node, "label",
> +         ifp->if_description, sizeof(ifp->if_description));
> +
>       sc->sc_ifd.if_node = sc->sc_node;
>       sc->sc_ifd.if_ifp = ifp;
>       if_register(&sc->sc_ifd);
> 

-- 
:wq Claudio

Reply via email to