On Fri, Aug 05, 2022 at 07:10:24AM +0000, Klemens Nanni wrote:
> All of them are passed to inspect/copy out fields, none of the functions
> writes to the struct.
>
> This makes it easier to argue about code (in MP context) and syncs ND6 code
> with NetBSD and FreeBSD.
>
> Builds and runs fine on sparc64.
>
> Feedback? OK?
OK bluhm@
> diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
> index c0b92f059c9..3a40e920746 100644
> --- a/sys/netinet6/nd6.c
> +++ b/sys/netinet6/nd6.c
> @@ -301,7 +301,7 @@ skip1:
> * ND6 timer routine to handle ND6 entries
> */
> void
> -nd6_llinfo_settimer(struct llinfo_nd6 *ln, unsigned int secs)
> +nd6_llinfo_settimer(const struct llinfo_nd6 *ln, unsigned int secs)
> {
> time_t expire = getuptime() + secs;
>
> @@ -547,7 +547,7 @@ nd6_purge(struct ifnet *ifp)
> }
>
> struct rtentry *
> -nd6_lookup(struct in6_addr *addr6, int create, struct ifnet *ifp,
> +nd6_lookup(const struct in6_addr *addr6, int create, struct ifnet *ifp,
> u_int rtableid)
> {
> struct rtentry *rt;
> @@ -641,7 +641,7 @@ nd6_lookup(struct in6_addr *addr6, int create, struct
> ifnet *ifp,
> * XXX: should take care of the destination of a p2p link?
> */
> int
> -nd6_is_addr_neighbor(struct sockaddr_in6 *addr, struct ifnet *ifp)
> +nd6_is_addr_neighbor(const struct sockaddr_in6 *addr, struct ifnet *ifp)
> {
> struct in6_ifaddr *ia6;
> struct ifaddr *ifa;
> @@ -1079,7 +1079,7 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp)
> * code - type dependent information
> */
> void
> -nd6_cache_lladdr(struct ifnet *ifp, struct in6_addr *from, char *lladdr,
> +nd6_cache_lladdr(struct ifnet *ifp, const struct in6_addr *from, char
> *lladdr,
> int lladdrlen, int type, int code)
> {
> struct rtentry *rt = NULL;
> diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h
> index 8ea60eb9c5f..8e25cbb523a 100644
> --- a/sys/netinet6/nd6.h
> +++ b/sys/netinet6/nd6.h
> @@ -157,27 +157,29 @@ union nd_opts {
> void nd6_init(void);
> struct nd_ifinfo *nd6_ifattach(struct ifnet *);
> void nd6_ifdetach(struct nd_ifinfo *);
> -int nd6_is_addr_neighbor(struct sockaddr_in6 *, struct ifnet *);
> +int nd6_is_addr_neighbor(const struct sockaddr_in6 *, struct ifnet *);
> void nd6_option_init(void *, int, union nd_opts *);
> struct nd_opt_hdr *nd6_option(union nd_opts *);
> int nd6_options(union nd_opts *);
> -struct rtentry *nd6_lookup(struct in6_addr *, int, struct ifnet *,
> u_int);
> -void nd6_llinfo_settimer(struct llinfo_nd6 *, unsigned int);
> +struct rtentry *nd6_lookup(const struct in6_addr *, int, struct ifnet
> *,
> + u_int);
> +void nd6_llinfo_settimer(const struct llinfo_nd6 *, unsigned int);
> void nd6_purge(struct ifnet *);
> void nd6_nud_hint(struct rtentry *);
> void nd6_rtrequest(struct ifnet *, int, struct rtentry *);
> int nd6_ioctl(u_long, caddr_t, struct ifnet *);
> -void nd6_cache_lladdr(struct ifnet *, struct in6_addr *, char *, int, int,
> int);
> +void nd6_cache_lladdr(struct ifnet *, const struct in6_addr *, char *,
> + int, int, int);
> int nd6_resolve(struct ifnet *, struct rtentry *, struct mbuf *,
> struct sockaddr *, u_char *);
> int nd6_need_cache(struct ifnet *);
>
> void nd6_na_input(struct mbuf *, int, int);
> -void nd6_na_output(struct ifnet *, struct in6_addr *,
> - struct in6_addr *, u_long, int, struct sockaddr *);
> +void nd6_na_output(struct ifnet *, const struct in6_addr *,
> + const struct in6_addr *, u_long, int, struct sockaddr *);
> void nd6_ns_input(struct mbuf *, int, int);
> -void nd6_ns_output(struct ifnet *, struct in6_addr *,
> - struct in6_addr *, struct llinfo_nd6 *, int);
> +void nd6_ns_output(struct ifnet *, const struct in6_addr *,
> + const struct in6_addr *, const struct llinfo_nd6 *, int);
> caddr_t nd6_ifptomac(struct ifnet *);
> void nd6_dad_start(struct ifaddr *);
> void nd6_dad_stop(struct ifaddr *);
> diff --git a/sys/netinet6/nd6_nbr.c b/sys/netinet6/nd6_nbr.c
> index 5061a325f55..d922d907bf9 100644
> --- a/sys/netinet6/nd6_nbr.c
> +++ b/sys/netinet6/nd6_nbr.c
> @@ -357,8 +357,8 @@ nd6_ns_input(struct mbuf *m, int off, int icmp6len)
> * dad - duplicated address detection
> */
> void
> -nd6_ns_output(struct ifnet *ifp, struct in6_addr *daddr6,
> - struct in6_addr *taddr6, struct llinfo_nd6 *ln, int dad)
> +nd6_ns_output(struct ifnet *ifp, const struct in6_addr *daddr6,
> + const struct in6_addr *taddr6, const struct llinfo_nd6 *ln, int dad)
> {
> struct mbuf *m;
> struct ip6_hdr *ip6;
> @@ -871,8 +871,8 @@ nd6_na_input(struct mbuf *m, int off, int icmp6len)
> * sdl0 - sockaddr_dl (= proxy NA) or NULL
> */
> void
> -nd6_na_output(struct ifnet *ifp, struct in6_addr *daddr6,
> - struct in6_addr *taddr6, u_long flags, int tlladdr,
> +nd6_na_output(struct ifnet *ifp, const struct in6_addr *daddr6,
> + const struct in6_addr *taddr6, u_long flags, int tlladdr,
> struct sockaddr *sdl0)
> {
> struct mbuf *m;