On Wed, May 31, 2023 at 02:07:17PM +0000, Klemens Nanni wrote:
> On Wed, May 31, 2023 at 10:27:13AM +0200, Claudio Jeker wrote:
> > On Tue, May 30, 2023 at 11:56:01PM +0000, Klemens Nanni wrote:
> > > On Tue, May 23, 2023 at 07:13:28PM +0000, Klemens Nanni wrote:
> > > > On Sat, Jan 14, 2023 at 02:28:27PM +0000, Stuart Henderson wrote:
> > > > > On 2023/01/12 04:49, Mikolaj Kucharski wrote:
> > > > > > Hi,
> > > > > > 
> > > > > > Is there anything else which I can do, to help this diff reviwed and
> > > > > > increase the chance of getting in?
> > > > > > 
> > > > > > Thread at https://marc.info/?t=163478298600001&r=1&w=2
> > > > > > 
> > > > > > Last version of the diff at
> > > > > > https://marc.info/?l=openbsd-tech&m=167185582521873&q=mbox
> > > > > 
> > > > > Inlining that for a few comments, otherwise it's ok sthen
> > > > 
> > > > wgdescr[iption] would be consistent with the existing descr[iption].
> > > > At least my keep typing the trailing "r"...
> > > > 
> > > > Then '-wgdescr' and 'wgdescr ""' work and are implemented exactly like
> > > > te inteface description equivalents.
> > > > 
> > > > I could use this now in a new VPN setup, so here's a polished diff,
> > > > with the above, missing ifconfig.8 bits written and other nits inline.
> > > > 
> > > > As Theo suggested, I'd drop the wg.4 and leave it to ifconfig.8 proper.
> > > > 
> > > > Feedback?
> > > > 
> > > > Either way, net/wireguard-tools needs a bump/rebuild.
> > > 
> > > Updated diff at the end, grabbing the new per-description mutex also for
> > > reading, not just writing it.
> > > 
> > > I did not run into an issue with the first two diffs, but other peer
> > > properties have their own mutex as well and they're consistently used
> > > for all accesses, as I'd expect, so protect new description properly.
> > > 
> > > Also fixed ifconfig.8's wireguard synopsis bits.
> > > 
> > > Anyone?
> > 
> > This mutex makes very little sense to me.  
> > Access to this field is already serialized by the sc->sc_lock rwlock
> > so there is no need for this mutex.
> 
> Right, description is only read/written through the ioctl, whereas other
> stuff under its own mutex, e.g. peer rx/tx counters, need to serialise
> packet processing/actual counting with reading out from the ioctl layer.
> 
> I did not look close enough, but lazily grabbed the original diff's mutex
> in all places.
> 
> Hopefully the last diff.

Two comments below. With them fixed OK claudio@
 
> Index: sys/net/if_wg.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_wg.c,v
> retrieving revision 1.27
> diff -u -p -r1.27 if_wg.c
> --- sys/net/if_wg.c   30 May 2023 08:30:01 -0000      1.27
> +++ sys/net/if_wg.c   31 May 2023 12:41:50 -0000
> @@ -221,6 +221,8 @@ struct wg_peer {
>  
>       SLIST_ENTRY(wg_peer)     p_start_list;
>       int                      p_start_onlist;
> +
> +     char                     p_description[IFDESCRSIZE];
>  };
>  
>  struct wg_softc {
> @@ -407,6 +409,8 @@ wg_peer_create(struct wg_softc *sc, uint
>       peer->p_counters_tx = 0;
>       peer->p_counters_rx = 0;
>  
> +     strlcpy(peer->p_description, "", IFDESCRSIZE);
> +
>       mtx_init(&peer->p_endpoint_mtx, IPL_NET);
>       bzero(&peer->p_endpoint, sizeof(peer->p_endpoint));
>  
> @@ -581,6 +585,11 @@ wg_peer_counters_add(struct wg_peer *pee
>       mtx_leave(&peer->p_counters_mtx);
>  }
>  
> +void
> +wg_peer_get_description(struct wg_peer *peer, char *description)
> +{
> +}
> +

Empty function does nothing.

>  int
>  wg_aip_add(struct wg_softc *sc, struct wg_peer *peer, struct wg_aip_io *d)
>  {
> @@ -2320,6 +2329,10 @@ wg_ioctl_set(struct wg_softc *sc, struct
>                       }
>               }
>  
> +             if (peer_o.p_flags & WG_PEER_SET_DESCRIPTION)
> +                     strlcpy(peer->p_description, peer_o.p_description,
> +                         IFDESCRSIZE);
> +
>               aip_p = &peer_p->p_aips[0];
>               for (j = 0; j < peer_o.p_aips_count; j++) {
>                       if ((ret = copyin(aip_p, &aip_o, sizeof(aip_o))) != 0)
> @@ -2429,6 +2442,8 @@ wg_ioctl_get(struct wg_softc *sc, struct
>                       aip_count++;
>               }
>               peer_o.p_aips_count = aip_count;
> +
> +             strlcpy(peer_o.p_description, peer->p_description, IFDESCRSIZE);
>  
>               if ((ret = copyout(&peer_o, peer_p, sizeof(peer_o))) != 0)
>                       goto unlock_and_ret_size;
> Index: sys/net/if_wg.h
> ===================================================================
> RCS file: /cvs/src/sys/net/if_wg.h,v
> retrieving revision 1.4
> diff -u -p -r1.4 if_wg.h
> --- sys/net/if_wg.h   22 Jun 2020 12:20:44 -0000      1.4
> +++ sys/net/if_wg.h   29 May 2023 22:20:02 -0000
> @@ -61,6 +61,7 @@ struct wg_aip_io {
>  #define WG_PEER_REPLACE_AIPS         (1 << 4)
>  #define WG_PEER_REMOVE                       (1 << 5)
>  #define WG_PEER_UPDATE                       (1 << 6)
> +#define WG_PEER_SET_DESCRIPTION              (1 << 7)
>  
>  #define p_sa         p_endpoint.sa_sa
>  #define p_sin                p_endpoint.sa_sin
> @@ -80,6 +81,7 @@ struct wg_peer_io {
>       uint64_t                p_txbytes;
>       uint64_t                p_rxbytes;
>       struct timespec         p_last_handshake; /* nanotime */
> +     char                    p_description[IFDESCRSIZE];
>       size_t                  p_aips_count;
>       struct wg_aip_io        p_aips[];
>  };
> Index: sbin/ifconfig/ifconfig.8
> ===================================================================
> RCS file: /cvs/src/sbin/ifconfig/ifconfig.8,v
> retrieving revision 1.395
> diff -u -p -r1.395 ifconfig.8
> --- sbin/ifconfig/ifconfig.8  16 May 2023 14:32:54 -0000      1.395
> +++ sbin/ifconfig/ifconfig.8  30 May 2023 23:38:33 -0000
> @@ -2316,6 +2316,7 @@ Packets on a VLAN interface without a ta
>  .Op Fl wgpeerall
>  .Oo
>  .Oo Fl Oc Ns Cm wgpeer Ar publickey
> +.Op Oo Fl Oc Ns Cm wgdescr Ns Oo Cm iption Oc Ar value
>  .Op Cm wgaip Ar allowed-ip_address/prefix
>  .Op Cm wgendpoint Ar peer_address port
>  .Op Cm wgpka Ar interval
> @@ -2383,6 +2384,13 @@ Peer configuration options, which apply 
>  immediately preceding them,
>  are as follows:
>  .Bl -tag -width Ds
> +.Tg wgdescription
> +.It Cm wgdescr Ns Oo Cm iption Oc Ar value
> +Set the peer's description.
> +This can be used to label peers in situations where they may
> +otherwise be difficult to distinguish.
> +.It Cm -wgdescr Ns Op Cm iption
> +Clear the peer description.
>  .It Cm wgaip Ar allowed-ip_address/prefix
>  Set the peer's IPv4 or IPv6
>  .Ar allowed-ip_address
> Index: sbin/ifconfig/ifconfig.c
> ===================================================================
> RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
> retrieving revision 1.464
> diff -u -p -r1.464 ifconfig.c
> --- sbin/ifconfig/ifconfig.c  16 May 2023 14:32:54 -0000      1.464
> +++ sbin/ifconfig/ifconfig.c  29 May 2023 22:20:02 -0000
> @@ -351,6 +351,7 @@ void      transceiverdump(const char *, int);
>  
>  /* WG */
>  void setwgpeer(const char *, int);
> +void setwgpeerdesc(const char *, int);
>  void setwgpeerep(const char *, const char *);
>  void setwgpeeraip(const char *, int);
>  void setwgpeerpsk(const char *, int);
> @@ -360,6 +361,7 @@ void      setwgkey(const char *, int);
>  void setwgrtable(const char *, int);
>  
>  void unsetwgpeer(const char *, int);
> +void unsetwgpeerdesc(const char *, int);
>  void unsetwgpeerpsk(const char *, int);
>  void unsetwgpeerall(const char *, int);
>  
> @@ -619,6 +621,8 @@ const struct      cmd {
>       { "sffdump",    0,              0,              transceiverdump },
>  
>       { "wgpeer",     NEXTARG,        A_WIREGUARD,    setwgpeer},
> +     { "wgdescription", NEXTARG,     A_WIREGUARD,    setwgpeerdesc},
> +     { "wgdescr",    NEXTARG,        A_WIREGUARD,    setwgpeerdesc},
>       { "wgendpoint", NEXTARG2,       A_WIREGUARD,    NULL,   setwgpeerep},
>       { "wgaip",      NEXTARG,        A_WIREGUARD,    setwgpeeraip},
>       { "wgpsk",      NEXTARG,        A_WIREGUARD,    setwgpeerpsk},
> @@ -627,7 +631,8 @@ const struct      cmd {
>       { "wgkey",      NEXTARG,        A_WIREGUARD,    setwgkey},
>       { "wgrtable",   NEXTARG,        A_WIREGUARD,    setwgrtable},
>       { "-wgpeer",    NEXTARG,        A_WIREGUARD,    unsetwgpeer},
> -     { "-wgpsk",     0,              A_WIREGUARD,    unsetwgpeerpsk},
> +     { "-wgdescription", 0,          A_WIREGUARD,    unsetwgpeerdesc},
> +     { "-wgdescr",   0,              A_WIREGUARD,    unsetwgpeerdesc},
>       { "-wgpeerall", 0,              A_WIREGUARD,    unsetwgpeerall},
>  
>  #else /* SMALL */
> @@ -5736,6 +5741,15 @@ setwgpeer(const char *peerkey_b64, int p
>  }
>  
>  void
> +setwgpeerdesc(const char *descr, int param)
> +{
> +     if (wg_peer == NULL)
> +             errx(1, "wgdescr: wgpeer not set");
> +     wg_peer->p_flags |= WG_PEER_SET_DESCRIPTION;
> +     strlcpy(wg_peer->p_description, descr, IFDESCRSIZE);
> +}
> +
> +void
>  setwgpeeraip(const char *aip, int param)
>  {
>       int res;
> @@ -5839,6 +5853,15 @@ unsetwgpeer(const char *peerkey_b64, int
>  }
>  
>  void
> +unsetwgpeerdesc(const char *descr, int param)
> +{
> +     if (wg_peer == NULL)
> +             errx(1, "wgdescr: wgpeer not set");
> +     wg_peer->p_flags |= WG_PEER_SET_DESCRIPTION;
> +     strlcpy(wg_peer->p_description, "", IFDESCRSIZE);
> +}
> +
> +void
>  unsetwgpeerpsk(const char *value, int param)
>  {
>       if (wg_peer == NULL)
> @@ -5907,6 +5930,9 @@ wg_status(int ifaliases)
>                       b64_ntop(wg_peer->p_public, WG_KEY_LEN,
>                           key, sizeof(key));
>                       printf("\twgpeer %s\n", key);
> +
> +                     if (strlen(wg_peer->p_description))
> +                             printf("\t\twgdescr: %s\n", 
> wg_peer->p_description);

Looks like a line that is too long but please double check.

>  
>                       if (wg_peer->p_flags & WG_PEER_HAS_PSK)
>                               printf("\t\twgpsk (present)\n");
> 

-- 
:wq Claudio

Reply via email to