Re: [patch]lock and unlock like GnuRCS

2014-10-07 Thread Daniel Dickman
Fritjof, have you let the gnu rcs project know about the segfault?
Maybe see how they choose to fix things and then follow their lead?


On Mon, Oct 6, 2014 at 10:47 AM, Nicholas Marriott
 wrote:
>
> I think that GNU RCS segfaulting for -u -l is enough justification to do
> what we like, so a message (and last flag wins) like -L/-U would be fine
> with me.
>
> But if we want to do what they probably "meant" to happen then better to
> match -l -u like Fritjof's diff.
>
>
> On Fri, Oct 03, 2014 at 12:55:35PM +0200, Otto Moerbeek wrote:
> > On Thu, Oct 02, 2014 at 12:56:10AM +0100, Nicholas Marriott wrote:
> >
> > >
> > > OTOH, check out what we do with rcs -L and -U...
> >
> > I kinda like that, because it tells you exactly what it is doing.
> >
> >   -Otto
> >
> > >
> > >
> > > On Thu, Oct 02, 2014 at 12:54:13AM +0100, Nicholas Marriott wrote:
> > > > Matching GNU RCS seems preferable to me but I don't feel strongly about
> > > > it.
> > > >
> > > > I wouldn't mention this in the man page, it hardly seems like behaviour
> > > > anyone should (or will need to) rely on.
> > > >
> > > >
> > > > On Wed, Oct 01, 2014 at 07:41:52PM -0400, Daniel Dickman wrote:
> > > > > posix commands (like ls(1) for example) keep the last option when 
> > > > > mutually exclusive options are specified. does it make sense to keep 
> > > > > rcs consistent with that convention? also is a man page diff needed?
> > > > >
> > > > >
> > > > > > On Oct 1, 2014, at 7:17 PM, Nicholas Marriott 
> > > > > >  wrote:
> > > > > >
> > > > > > The existing behaviour isn't wildly useful, makes sense to me, ok 
> > > > > > nicm
> > > > > >
> > > > > >
> > > > > >> On Wed, Oct 01, 2014 at 11:33:33PM +0200, Fritjof Bornebusch wrote:
> > > > > >> Hi tech,
> > > > > >>
> > > > > >> the OpenRCS rcs command produces the following output if -l and -u 
> > > > > >> is
> > > > > >> used in the same command:
> > > > > >>
> > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > >> RCS file: foo.txt,v
> > > > > >> 1.1 locked
> > > > > >> 1.1 unlocked
> > > > > >>
> > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > >> RCS file: foo.txt,v
> > > > > >> 1.1 locked
> > > > > >> 1.1 unlocked
> > > > > >>
> > > > > >> I've looked at GnuRCS and it has another way to handle these 
> > > > > >> parameters
> > > > > >> (it seems the other BSDs use GnuRCS, too).
> > > > > >>
> > > > > >> Debian 7.5:
> > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > >> RCS file: foo.txt,v
> > > > > >> rcs: foo.txt,v: no lock set on revision 1.1
> > > > > >> 1.1 locked
> > > > > >>
> > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > >> Segmentation fault
> > > > > >>
> > > > > >> Well, I think the "Segmentation fault" isn't that important :), 
> > > > > >> but GnuRCS
> > > > > >> does not lock and unlock a file by using the same command like 
> > > > > >> OpenRCS.
> > > > > >>
> > > > > >> I think the different implementations of RCS should share the same
> > > > > >> behaviour:
> > > > > >>
> > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > >> RCS file: foo.txt,v
> > > > > >> 1.1 locked
> > > > > >> done
> > > > > >>
> > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > >> RCS file: foo.txt,v
> > > > > >> 1.1 unlocked
> > > > > >> done
> > > > > >>
> > > > > >> fritjof
> > > > > >>
> > > > > >>
> > > > > >> Index: rcsprog.c
> > > > > >> ===
> > > > > >> RCS file: /cvs/src/usr.bin/rcs/rcsprog.c,v
> > > > > >> retrieving revision 1.151
> > > > > >> diff -u -p -r1.151 rcsprog.c
> > > > > >> --- rcsprog.c12 Jul 2011 21:00:32 -1.151
> > > > > >> +++ rcsprog.c3 Aug 2014 15:42:34 -
> > > > > >> @@ -234,9 +234,10 @@ rcs_main(int argc, char **argv)
> > > > > >>lkmode = RCS_LOCK_STRICT;
> > > > > >>break;
> > > > > >>case 'l':
> > > > > >> -/* XXX - Check with -u flag. */
> > > > > >> -lrev = rcs_optarg;
> > > > > >> -rcsflags |= RCSPROG_LFLAG;
> > > > > >> +if (!(rcsflags & RCSPROG_UFLAG)) {
> > > > > >> +lrev = rcs_optarg;
> > > > > >> +rcsflags |= RCSPROG_LFLAG;
> > > > > >> +}
> > > > > >>break;
> > > > > >>case 'm':
> > > > > >>if (logstr != NULL)
> > > > > >> @@ -272,9 +273,10 @@ rcs_main(int argc, char **argv)
> > > > > >>lkmode = RCS_LOCK_LOOSE;
> > > > > >>break;
> > > > > >>case 'u':
> > > > > >> -/* XXX - Check with -l flag. */
> > > > > >> -urev = rcs_optarg;
> > > > > >> -rcsflags |= RCSPROG_UFLAG;
> > > > > >> +if (!(rcsflags & RCSPROG_LFLAG)) {
> > > > > >> +urev = rcs_optarg;
> > > > > >> +rcsflags |= RCSPROG_UFLAG;
> > > > > >> +}
> > > > > >>break;
> > > > > >>case 'V':
> > > > > >>printf("%s\n", rcs_version);
> > > > > >



Re: [patch]lock and unlock like GnuRCS

2014-10-07 Thread Otto Moerbeek
On Tue, Oct 07, 2014 at 03:10:44AM -0400, Daniel Dickman wrote:

> Fritjof, have you let the gnu rcs project know about the segfault?
> Maybe see how they choose to fix things and then follow their lead?

That will only slow things down. Do what -L -U does is better, imo.

-Otto
> 
> 
> On Mon, Oct 6, 2014 at 10:47 AM, Nicholas Marriott
>  wrote:
> >
> > I think that GNU RCS segfaulting for -u -l is enough justification to do
> > what we like, so a message (and last flag wins) like -L/-U would be fine
> > with me.
> >
> > But if we want to do what they probably "meant" to happen then better to
> > match -l -u like Fritjof's diff.
> >
> >
> > On Fri, Oct 03, 2014 at 12:55:35PM +0200, Otto Moerbeek wrote:
> > > On Thu, Oct 02, 2014 at 12:56:10AM +0100, Nicholas Marriott wrote:
> > >
> > > >
> > > > OTOH, check out what we do with rcs -L and -U...
> > >
> > > I kinda like that, because it tells you exactly what it is doing.
> > >
> > >   -Otto
> > >
> > > >
> > > >
> > > > On Thu, Oct 02, 2014 at 12:54:13AM +0100, Nicholas Marriott wrote:
> > > > > Matching GNU RCS seems preferable to me but I don't feel strongly 
> > > > > about
> > > > > it.
> > > > >
> > > > > I wouldn't mention this in the man page, it hardly seems like 
> > > > > behaviour
> > > > > anyone should (or will need to) rely on.
> > > > >
> > > > >
> > > > > On Wed, Oct 01, 2014 at 07:41:52PM -0400, Daniel Dickman wrote:
> > > > > > posix commands (like ls(1) for example) keep the last option when 
> > > > > > mutually exclusive options are specified. does it make sense to 
> > > > > > keep rcs consistent with that convention? also is a man page diff 
> > > > > > needed?
> > > > > >
> > > > > >
> > > > > > > On Oct 1, 2014, at 7:17 PM, Nicholas Marriott 
> > > > > > >  wrote:
> > > > > > >
> > > > > > > The existing behaviour isn't wildly useful, makes sense to me, ok 
> > > > > > > nicm
> > > > > > >
> > > > > > >
> > > > > > >> On Wed, Oct 01, 2014 at 11:33:33PM +0200, Fritjof Bornebusch 
> > > > > > >> wrote:
> > > > > > >> Hi tech,
> > > > > > >>
> > > > > > >> the OpenRCS rcs command produces the following output if -l and 
> > > > > > >> -u is
> > > > > > >> used in the same command:
> > > > > > >>
> > > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 locked
> > > > > > >> 1.1 unlocked
> > > > > > >>
> > > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 locked
> > > > > > >> 1.1 unlocked
> > > > > > >>
> > > > > > >> I've looked at GnuRCS and it has another way to handle these 
> > > > > > >> parameters
> > > > > > >> (it seems the other BSDs use GnuRCS, too).
> > > > > > >>
> > > > > > >> Debian 7.5:
> > > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> rcs: foo.txt,v: no lock set on revision 1.1
> > > > > > >> 1.1 locked
> > > > > > >>
> > > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > > >> Segmentation fault
> > > > > > >>
> > > > > > >> Well, I think the "Segmentation fault" isn't that important :), 
> > > > > > >> but GnuRCS
> > > > > > >> does not lock and unlock a file by using the same command like 
> > > > > > >> OpenRCS.
> > > > > > >>
> > > > > > >> I think the different implementations of RCS should share the 
> > > > > > >> same
> > > > > > >> behaviour:
> > > > > > >>
> > > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 locked
> > > > > > >> done
> > > > > > >>
> > > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 unlocked
> > > > > > >> done
> > > > > > >>
> > > > > > >> fritjof
> > > > > > >>
> > > > > > >>
> > > > > > >> Index: rcsprog.c
> > > > > > >> ===
> > > > > > >> RCS file: /cvs/src/usr.bin/rcs/rcsprog.c,v
> > > > > > >> retrieving revision 1.151
> > > > > > >> diff -u -p -r1.151 rcsprog.c
> > > > > > >> --- rcsprog.c12 Jul 2011 21:00:32 -1.151
> > > > > > >> +++ rcsprog.c3 Aug 2014 15:42:34 -
> > > > > > >> @@ -234,9 +234,10 @@ rcs_main(int argc, char **argv)
> > > > > > >>lkmode = RCS_LOCK_STRICT;
> > > > > > >>break;
> > > > > > >>case 'l':
> > > > > > >> -/* XXX - Check with -u flag. */
> > > > > > >> -lrev = rcs_optarg;
> > > > > > >> -rcsflags |= RCSPROG_LFLAG;
> > > > > > >> +if (!(rcsflags & RCSPROG_UFLAG)) {
> > > > > > >> +lrev = rcs_optarg;
> > > > > > >> +rcsflags |= RCSPROG_LFLAG;
> > > > > > >> +}
> > > > > > >>break;
> > > > > > >>case 'm':
> > > > > > >>if (logstr != NULL)
> > > > > > >> @@ -272,9 +273,10 @@ rcs_main(int argc, char **argv)
> > > > > > >>lkmode = RCS_LOCK_LOOSE;
> > > > > > >>break;
> > > > > > >>case 'u':
> > > > > > >> -/* XXX - Check with -l flag. */
> > > > > > >> -urev = rcs_op

Re: [patch]lock and unlock like GnuRCS

2014-10-07 Thread Daniel Dickman
On Tue, Oct 7, 2014 at 3:34 AM, Otto Moerbeek  wrote:
> On Tue, Oct 07, 2014 at 03:10:44AM -0400, Daniel Dickman wrote:
>
>> Fritjof, have you let the gnu rcs project know about the segfault?
>> Maybe see how they choose to fix things and then follow their lead?
>
> That will only slow things down. Do what -L -U does is better, imo.
>
> -Otto

between the 2 choices this would be my choice too.



Re: FIFO fd not marked readable after EOF

2014-10-07 Thread Dimitris Papastamos
On Mon, Oct 06, 2014 at 04:56:08PM -0600, Todd C. Miller wrote:
> The following diff should fix it.
> 
>  - todd
> 
> Index: sys/miscfs/fifofs/fifo_vnops.c
> ===
> RCS file: /home/cvs/openbsd/src/sys/miscfs/fifofs/fifo_vnops.c,v
> retrieving revision 1.41
> diff -u -r1.41 fifo_vnops.c
> --- sys/miscfs/fifofs/fifo_vnops.c14 Sep 2014 14:17:26 -  1.41
> +++ sys/miscfs/fifofs/fifo_vnops.c6 Oct 2014 22:51:50 -
> @@ -147,8 +147,8 @@
>   return (error);
>   }
>   fip->fi_readers = fip->fi_writers = 0;
> + wso->so_state |= SS_CANTSENDMORE;
>   wso->so_snd.sb_lowat = PIPE_BUF;
> - rso->so_state |= SS_CANTRCVMORE;
>   }
>   if (ap->a_mode & FREAD) {
>   fip->fi_readers++;
> @@ -287,24 +287,12 @@
>  {
>   struct vop_poll_args *ap = v;
>   struct file filetmp;
> - short ostate;
>   int revents = 0;
>  
>   if (ap->a_events & (POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND)) {
> - /*
> -  * Socket and FIFO poll(2) semantics differ wrt EOF on read.
> -  * Unlike a normal socket, FIFOs don't care whether or not
> -  * SS_CANTRCVMORE is set.  To get the correct semantics we
> -  * must clear SS_CANTRCVMORE from so_state temporarily.
> -  */
> - ostate = ap->a_vp->v_fifoinfo->fi_readsock->so_state;
> - if (ap->a_events & (POLLIN | POLLRDNORM))
> - ap->a_vp->v_fifoinfo->fi_readsock->so_state &=
> - ~SS_CANTRCVMORE;
>   filetmp.f_data = ap->a_vp->v_fifoinfo->fi_readsock;
>   if (filetmp.f_data)
>   revents |= soo_poll(&filetmp, ap->a_events, ap->a_p);
> - ap->a_vp->v_fifoinfo->fi_readsock->so_state = ostate;
>   }
>   if (ap->a_events & (POLLOUT | POLLWRNORM | POLLWRBAND)) {
>   filetmp.f_data = ap->a_vp->v_fifoinfo->fi_writesock;

Thanks, that fixed it!



Re: mg: add bounce matching for [] and {}

2014-10-07 Thread Stuart Cassoff
On 08/13/14 18:51, Brian Callahan wrote:
> Hi tech --
> 
> Diff below adds the bounce matching for [] and {} in mg like it does for ().
> I miss having that from GNU Emacs, anyone else?
> 
> OK?
> 
> ~Brian

Just noticed this yesterday. Thanks!


Stu




Re: Kill rtalloc_noclone()

2014-10-07 Thread Martin Pieuchot
On 30/09/14(Tue) 10:51, Martin Pieuchot wrote:
> After rtalloc(), here's a simpler inliner diff to only use rtalloc1()
> when dealing with route lookups.
> 
> ok?

Anyone?

> 
> Index: net/pf.c
> ===
> RCS file: /home/ncvs/src/sys/net/pf.c,v
> retrieving revision 1.887
> diff -u -p -r1.887 pf.c
> --- net/pf.c  27 Sep 2014 12:26:16 -  1.887
> +++ net/pf.c  30 Sep 2014 08:48:00 -
> @@ -2968,7 +2968,8 @@ pf_calc_mss(struct pf_addr *addr, sa_fam
>   dst->sin_len = sizeof(*dst);
>   dst->sin_addr = addr->v4;
>   ro.ro_tableid = rtableid;
> - rtalloc_noclone(&ro);
> + ro.ro_rt = rtalloc1(&ro.ro_dst, RT_REPORT | RT_NOCLONING,
> + ro.ro_tableid);
>   rt = ro.ro_rt;
>   break;
>  #endif /* INET */
> @@ -2981,7 +2982,8 @@ pf_calc_mss(struct pf_addr *addr, sa_fam
>   dst6->sin6_len = sizeof(*dst6);
>   dst6->sin6_addr = addr->v6;
>   ro6.ro_tableid = rtableid;
> - rtalloc_noclone((struct route *)&ro6);
> + ro6.ro_rt = rtalloc1(sin6tosa(&ro6.ro_dst),
> + RT_REPORT | RT_NOCLONING, ro6.ro_tableid);
>   rt = ro6.ro_rt;
>   break;
>  #endif /* INET6 */
> @@ -5435,7 +5437,8 @@ pf_routable(struct pf_addr *addr, sa_fam
>   if (kif != NULL && kif->pfik_ifp->if_type == IFT_ENC)
>   goto out;
>  
> - rtalloc_noclone((struct route *)&ro);
> + ro.ro_rt = rtalloc1((struct sockaddr *)&ro.ro_dst,
> + RT_REPORT | RT_NOCLONING, ro.ro_tableid);
>  
>   if (ro.ro_rt != NULL) {
>   /* No interface given, this is a no-route check */
> @@ -5502,7 +5505,8 @@ pf_rtlabel_match(struct pf_addr *addr, s
>  #endif /* INET6 */
>   }
>  
> - rtalloc_noclone((struct route *)&ro);
> + ro.ro_rt = rtalloc1((struct sockaddr *)&ro.ro_dst,
> + RT_REPORT | RT_NOCLONING, ro.ro_tableid);
>  
>   if (ro.ro_rt != NULL) {
>   if (ro.ro_rt->rt_labelid == aw->v.rtlabel)
> Index: net/route.c
> ===
> RCS file: /home/ncvs/src/sys/net/route.c,v
> retrieving revision 1.183
> diff -u -p -r1.183 route.c
> --- net/route.c   27 Sep 2014 12:26:16 -  1.183
> +++ net/route.c   30 Sep 2014 08:48:00 -
> @@ -310,18 +310,6 @@ rtable_exists(u_int id)  /* verify table 
>   return (1);
>  }
>  
> -/*
> - * Packet routing routines.
> - */
> -void
> -rtalloc_noclone(struct route *ro)
> -{
> - if (ro->ro_rt && ro->ro_rt->rt_ifp && (ro->ro_rt->rt_flags & RTF_UP))
> - return; /* cached route is still valid */
> - ro->ro_rt = rtalloc1(&ro->ro_dst, RT_REPORT | RT_NOCLONING,
> - ro->ro_tableid);
> -}
> -
>  struct rtentry *
>  rtalloc1(struct sockaddr *dst, int flags, u_int tableid)
>  {
> Index: net/route.h
> ===
> RCS file: /home/ncvs/src/sys/net/route.h,v
> retrieving revision 1.97
> diff -u -p -r1.97 route.h
> --- net/route.h   27 Sep 2014 12:26:16 -  1.97
> +++ net/route.h   30 Sep 2014 08:48:00 -
> @@ -380,7 +380,6 @@ void   rt_timer_queue_destroy(struct 
> rt
>  unsigned long rt_timer_queue_count(struct rttimer_queue *);
>  void  rt_timer_timer(void *);
>  
> -void  rtalloc_noclone(struct route *);
>  #ifdef SMALL_KERNEL
>  #define  rtalloc_mpath(dst, s, rtableid) rtalloc1((dst), RT_REPORT, 
> (rtableid))
>  #endif
> 



Re: re(4) mtu >1500

2014-10-07 Thread Stuart Henderson
On 2014/10/06 12:19, Chris Cappuccio wrote:
> Stuart Henderson [s...@spacehopper.org] wrote:
> > Does anyone have an idea of what's needed for working jumbos on the
> > RL_FLAG_JUMBOV2 variants of re(4) where they're currently disabled?
> > These seem to account for most of the chips seen in hardware
> > designs from the last couple of years (including APU and some others).
> > 
> > if ((sc->rl_flags & RL_FLAG_JUMBOV2) == 0)
> > ifp->if_hardmtu = sc->rl_max_mtu;
> > 
> 
> I think the secrets are here :)
> 
> http://svnweb.freebsd.org/base/releng/10.1/sys/dev/re/if_re.c?revision=272461&view=markup
> 

Ah, more specifically

http://svnweb.freebsd.org/base?view=revision&revision=217499 /
http://svnweb.freebsd.org/base/head/sys/dev/re/if_re.c?r1=217498&r2=217499&pathrev=217499

OK that's probably more than I can figure out how to port without
hardware then..



Unnecessary lookup for every packet in ip_output()

2014-10-07 Thread Martin Pieuchot
Now that we can use the routing table to check if the destination
of a packet is a broadcast address, we can replace the lookup done
for every packet by the simple check below.

Ok?

Index: netinet/ip_output.c
===
RCS file: /home/ncvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.267
diff -u -p -r1.267 ip_output.c
--- netinet/ip_output.c 27 Sep 2014 12:26:16 -  1.267
+++ netinet/ip_output.c 7 Oct 2014 10:09:56 -
@@ -484,8 +484,8 @@ reroute:
 * such a packet; if the packet is going in an IPsec tunnel, skip
 * this check.
 */
-   if ((sproto == 0) && (in_broadcast(dst->sin_addr, ifp,
-   m->m_pkthdr.ph_rtableid))) {
+   if ((sproto == 0) && ((dst->sin_addr.s_addr == INADDR_BROADCAST) ||
+   (ro && ro->ro_rt && ISSET(ro->ro_rt->rt_flags, RTF_BROADCAST {
if ((ifp->if_flags & IFF_BROADCAST) == 0) {
error = EADDRNOTAVAIL;
goto bad;



Re: [patch]lock and unlock like GnuRCS

2014-10-07 Thread Fritjof Bornebusch
On Tue, Oct 07, 2014 at 03:10:44AM -0400, Daniel Dickman wrote:
> Fritjof, have you let the gnu rcs project know about the segfault?
> Maybe see how they choose to fix things and then follow their lead?
>

No, I have not.
I hope they follow the tech@ mailing list. :)
 
> 
> On Mon, Oct 6, 2014 at 10:47 AM, Nicholas Marriott
>  wrote:
> >
> > I think that GNU RCS segfaulting for -u -l is enough justification to do
> > what we like, so a message (and last flag wins) like -L/-U would be fine
> > with me.
> >
> > But if we want to do what they probably "meant" to happen then better to
> > match -l -u like Fritjof's diff.
> >
> >
> > On Fri, Oct 03, 2014 at 12:55:35PM +0200, Otto Moerbeek wrote:
> > > On Thu, Oct 02, 2014 at 12:56:10AM +0100, Nicholas Marriott wrote:
> > >
> > > >
> > > > OTOH, check out what we do with rcs -L and -U...
> > >
> > > I kinda like that, because it tells you exactly what it is doing.
> > >
> > >   -Otto
> > >
> > > >
> > > >
> > > > On Thu, Oct 02, 2014 at 12:54:13AM +0100, Nicholas Marriott wrote:
> > > > > Matching GNU RCS seems preferable to me but I don't feel strongly 
> > > > > about
> > > > > it.
> > > > >
> > > > > I wouldn't mention this in the man page, it hardly seems like 
> > > > > behaviour
> > > > > anyone should (or will need to) rely on.
> > > > >
> > > > >
> > > > > On Wed, Oct 01, 2014 at 07:41:52PM -0400, Daniel Dickman wrote:
> > > > > > posix commands (like ls(1) for example) keep the last option when 
> > > > > > mutually exclusive options are specified. does it make sense to 
> > > > > > keep rcs consistent with that convention? also is a man page diff 
> > > > > > needed?
> > > > > >
> > > > > >
> > > > > > > On Oct 1, 2014, at 7:17 PM, Nicholas Marriott 
> > > > > > >  wrote:
> > > > > > >
> > > > > > > The existing behaviour isn't wildly useful, makes sense to me, ok 
> > > > > > > nicm
> > > > > > >
> > > > > > >
> > > > > > >> On Wed, Oct 01, 2014 at 11:33:33PM +0200, Fritjof Bornebusch 
> > > > > > >> wrote:
> > > > > > >> Hi tech,
> > > > > > >>
> > > > > > >> the OpenRCS rcs command produces the following output if -l and 
> > > > > > >> -u is
> > > > > > >> used in the same command:
> > > > > > >>
> > > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 locked
> > > > > > >> 1.1 unlocked
> > > > > > >>
> > > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 locked
> > > > > > >> 1.1 unlocked
> > > > > > >>
> > > > > > >> I've looked at GnuRCS and it has another way to handle these 
> > > > > > >> parameters
> > > > > > >> (it seems the other BSDs use GnuRCS, too).
> > > > > > >>
> > > > > > >> Debian 7.5:
> > > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> rcs: foo.txt,v: no lock set on revision 1.1
> > > > > > >> 1.1 locked
> > > > > > >>
> > > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > > >> Segmentation fault
> > > > > > >>
> > > > > > >> Well, I think the "Segmentation fault" isn't that important :), 
> > > > > > >> but GnuRCS
> > > > > > >> does not lock and unlock a file by using the same command like 
> > > > > > >> OpenRCS.
> > > > > > >>
> > > > > > >> I think the different implementations of RCS should share the 
> > > > > > >> same
> > > > > > >> behaviour:
> > > > > > >>
> > > > > > >> $ rcs -l1.1 -u1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 locked
> > > > > > >> done
> > > > > > >>
> > > > > > >> $ rcs -u1.1 -l1.1 foo.txt
> > > > > > >> RCS file: foo.txt,v
> > > > > > >> 1.1 unlocked
> > > > > > >> done
> > > > > > >>
> > > > > > >> fritjof
> > > > > > >>
> > > > > > >>
> > > > > > >> Index: rcsprog.c
> > > > > > >> ===
> > > > > > >> RCS file: /cvs/src/usr.bin/rcs/rcsprog.c,v
> > > > > > >> retrieving revision 1.151
> > > > > > >> diff -u -p -r1.151 rcsprog.c
> > > > > > >> --- rcsprog.c12 Jul 2011 21:00:32 -1.151
> > > > > > >> +++ rcsprog.c3 Aug 2014 15:42:34 -
> > > > > > >> @@ -234,9 +234,10 @@ rcs_main(int argc, char **argv)
> > > > > > >>lkmode = RCS_LOCK_STRICT;
> > > > > > >>break;
> > > > > > >>case 'l':
> > > > > > >> -/* XXX - Check with -u flag. */
> > > > > > >> -lrev = rcs_optarg;
> > > > > > >> -rcsflags |= RCSPROG_LFLAG;
> > > > > > >> +if (!(rcsflags & RCSPROG_UFLAG)) {
> > > > > > >> +lrev = rcs_optarg;
> > > > > > >> +rcsflags |= RCSPROG_LFLAG;
> > > > > > >> +}
> > > > > > >>break;
> > > > > > >>case 'm':
> > > > > > >>if (logstr != NULL)
> > > > > > >> @@ -272,9 +273,10 @@ rcs_main(int argc, char **argv)
> > > > > > >>lkmode = RCS_LOCK_LOOSE;
> > > > > > >>break;
> > > > > > >>case 'u':
> > > > > > >> -/* XXX - Check with -l flag. */
> > > > > > >> -urev = rcs_optarg;
> > > > > > >> 

remove repeated #define in acpithinkpad.c

2014-10-07 Thread Theo Buehler
The latest commit caused a repeated line:

Index: acpithinkpad.c
===
RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
retrieving revision 1.39
diff -u -p -r1.39 acpithinkpad.c
--- acpithinkpad.c  5 Oct 2014 01:31:12 -   1.39
+++ acpithinkpad.c  7 Oct 2014 11:02:35 -
@@ -68,7 +68,6 @@
 #defineTHINKPAD_BUTTON_HIBERNATE   0x100c
 #defineTHINKPAD_KEYLIGHT_CHANGED   0x101c
 #defineTHINKPAD_BUTTON_CONFIG  0x101d
-#defineTHINKPAD_BUTTON_CONFIG  0x101d
 #defineTHINKPAD_BUTTON_FIND0x101e
 #defineTHINKPAD_BUTTON_ALL_ACTIVEPROGS 0x101f
 #defineTHINKPAD_BUTTON_ALL_PROGS   0x1020



Re: remove repeated #define in acpithinkpad.c

2014-10-07 Thread Stuart Henderson
On 2014/10/07 13:08, Theo Buehler wrote:
> The latest commit caused a repeated line:
> 
> Index: acpithinkpad.c
> ===
> RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
> retrieving revision 1.39
> diff -u -p -r1.39 acpithinkpad.c
> --- acpithinkpad.c5 Oct 2014 01:31:12 -   1.39
> +++ acpithinkpad.c7 Oct 2014 11:02:35 -
> @@ -68,7 +68,6 @@
>  #define  THINKPAD_BUTTON_HIBERNATE   0x100c
>  #define  THINKPAD_KEYLIGHT_CHANGED   0x101c
>  #define  THINKPAD_BUTTON_CONFIG  0x101d
> -#define  THINKPAD_BUTTON_CONFIG  0x101d
>  #define  THINKPAD_BUTTON_FIND0x101e
>  #define  THINKPAD_BUTTON_ALL_ACTIVEPROGS 0x101f
>  #define  THINKPAD_BUTTON_ALL_PROGS   0x1020
> 

Fixed, thank you.



Re: hack for carp in IPv6 source address selection

2014-10-07 Thread Martin Pieuchot
On 03/10/14(Fri) 14:46, Stefan Sperling wrote:
> The IPv6 source address selection algorithm breaks ties by performing a
> bitwise match of each candidate source address against the destination
> address. The longest matching source address wins, regardless of which
> interface the source address came from.
> 
> In my carp setup, this is causing a problem.
> 
> Consider the carp address 2001:DB8:10::14, which is configured on
> firewall A (carp master state) and firewall B (carp backup state),
> each of which has another address in the same prefix on a non-carp
> interface (A has 2001:DB8:10::1 and B has 2001:DB8:10::11).
> 
> In this setup, connecting from A to B or from B to A via IPv6 is impossible.
> A will use 2001:DB8:10::14 as source address when it sends neighbour
> solicitations to B (2001:DB8:10::11). Since 2001:DB8:10::14 is a local
> address from B's point of view, B doesn't reply to neighbour solicitations
> sent by A. The only currently available workaround is to re-configure
> addresses in a way that outsmarts the longest match check such that a
> carp address always loses the tie. (Another workaround is to use IPv4
> which doesn't have this problem.)
> 
> The hack below special-cases carp interfaces: If there is a tie, then a
> carp interface is not allowed to win even if it has a longer bitwise match.
> (The carp interface is in master state here -- carp interfaces in backup
> state are never considered for source addresses in the first place.)
> 
> This hack makes communication between A and B work over IPv6 in the
> above scenario.

I think this hack makes sense.  I'm really afraid of the carp tentacles,
but I don't think there's a better way of solving this problem right
now.

This change is similar to the "let's move the cloning route" hack for
IPv4, since it gives a higher ``priority'' to any non-carp interface
when selecting source addresses, right?

> I also considered another solution: Make carp backups treat their
> local carp address as a non-local address. However, this would
> be a much more invasive change and would also affect IPv4.

This is certainly not an easy change, and it definitively comes with its
own specific dragons, but I believe that it would remove a lot of hacks
in the stack.

> - if (matchcmp > 0) /* (8) */
> + if (matchcmp > 0) { /* (8) */
> +#if NCARP > 0
> + /* 
[...]
> +  */
> + if (ifp->if_type == IFT_CARP)
> + continue;
> +#endif
>   goto replace;
> + }

What if oifp is also a carp interface?  Is it possible?  Shouldn't you
use the pattern of in_addprefix():

if (ifp->if_type == IFT_CARP &&
oifp->if_type != IFT_CARP)
continue;


Either way I'm ok with your diff.



Re: [patch]lock and unlock like GnuRCS

2014-10-07 Thread Fritjof Bornebusch
On Tue, Oct 07, 2014 at 09:34:33AM +0200, Otto Moerbeek wrote:
> On Tue, Oct 07, 2014 at 03:10:44AM -0400, Daniel Dickman wrote:
> 
> > Fritjof, have you let the gnu rcs project know about the segfault?
> > Maybe see how they choose to fix things and then follow their lead?
> 
> That will only slow things down. Do what -L -U does is better, imo.
>

Otto, so you appreciate a diff more like this one?
 
>   -Otto
> > 
> > 

fritjof

Index: rcsprog.c
===
RCS file: /cvs/src/usr.bin/rcs/rcsprog.c,v
retrieving revision 1.152
diff -u -p -r1.152 rcsprog.c
--- rcsprog.c   2 Oct 2014 06:23:15 -   1.152
+++ rcsprog.c   7 Oct 2014 12:53:10 -
@@ -235,9 +235,10 @@ rcs_main(int argc, char **argv)
lkmode = RCS_LOCK_STRICT;
break;
case 'l':
-   /* XXX - Check with -u flag. */
+   if (rcsflags & RCSPROG_UFLAG)
+   warnx("-u overridden by -l");
lrev = rcs_optarg;
-   rcsflags |= RCSPROG_LFLAG;
+   rcsflags = RCSPROG_LFLAG;
break;
case 'm':
if (logstr != NULL)
@@ -273,9 +274,10 @@ rcs_main(int argc, char **argv)
lkmode = RCS_LOCK_LOOSE;
break;
case 'u':
-   /* XXX - Check with -l flag. */
+   if (rcsflags & RCSPROG_LFLAG)
+   warnx("-l overridden by -u");
urev = rcs_optarg;
-   rcsflags |= RCSPROG_UFLAG;
+   rcsflags = RCSPROG_UFLAG;
break;
case 'V':
printf("%s\n", rcs_version);



Re: [patch]lock and unlock like GnuRCS

2014-10-07 Thread Otto Moerbeek
On Tue, Oct 07, 2014 at 02:56:07PM +0200, Fritjof Bornebusch wrote:

> On Tue, Oct 07, 2014 at 09:34:33AM +0200, Otto Moerbeek wrote:
> > On Tue, Oct 07, 2014 at 03:10:44AM -0400, Daniel Dickman wrote:
> > 
> > > Fritjof, have you let the gnu rcs project know about the segfault?
> > > Maybe see how they choose to fix things and then follow their lead?
> > 
> > That will only slow things down. Do what -L -U does is better, imo.
> >
> 
> Otto, so you appreciate a diff more like this one?

well, almost. I think it should be clear one flag and set one, not clear
all and set one. 

>  
> > -Otto
> > > 
> > > 
> 
> fritjof
> 
> Index: rcsprog.c
> ===
> RCS file: /cvs/src/usr.bin/rcs/rcsprog.c,v
> retrieving revision 1.152
> diff -u -p -r1.152 rcsprog.c
> --- rcsprog.c 2 Oct 2014 06:23:15 -   1.152
> +++ rcsprog.c 7 Oct 2014 12:53:10 -
> @@ -235,9 +235,10 @@ rcs_main(int argc, char **argv)
>   lkmode = RCS_LOCK_STRICT;
>   break;
>   case 'l':
> - /* XXX - Check with -u flag. */
> + if (rcsflags & RCSPROG_UFLAG)
> + warnx("-u overridden by -l");
>   lrev = rcs_optarg;
> - rcsflags |= RCSPROG_LFLAG;
> + rcsflags = RCSPROG_LFLAG;
>   break;
>   case 'm':
>   if (logstr != NULL)
> @@ -273,9 +274,10 @@ rcs_main(int argc, char **argv)
>   lkmode = RCS_LOCK_LOOSE;
>   break;
>   case 'u':
> - /* XXX - Check with -l flag. */
> + if (rcsflags & RCSPROG_LFLAG)
> + warnx("-l overridden by -u");
>   urev = rcs_optarg;
> - rcsflags |= RCSPROG_UFLAG;
> + rcsflags = RCSPROG_UFLAG;
>   break;
>   case 'V':
>   printf("%s\n", rcs_version);



Re: [patch]lock and unlock like GnuRCS

2014-10-07 Thread Fritjof Bornebusch
On Tue, Oct 07, 2014 at 03:11:28PM +0200, Otto Moerbeek wrote:
> On Tue, Oct 07, 2014 at 02:56:07PM +0200, Fritjof Bornebusch wrote:
> 
> > On Tue, Oct 07, 2014 at 09:34:33AM +0200, Otto Moerbeek wrote:
> > > On Tue, Oct 07, 2014 at 03:10:44AM -0400, Daniel Dickman wrote:
> > > 
> > > > Fritjof, have you let the gnu rcs project know about the segfault?
> > > > Maybe see how they choose to fix things and then follow their lead?
> > > 
> > > That will only slow things down. Do what -L -U does is better, imo.
> > >
> > 
> > Otto, so you appreciate a diff more like this one?
> 
> well, almost. I think it should be clear one flag and set one, not clear
> all and set one. 
>

Here is the new one.
 
> >  
> > >   -Otto
> > > > 
> > > > 
> > 
> > fritjof
> > 

fritjof

Index: rcsprog.c
===
RCS file: /cvs/src/usr.bin/rcs/rcsprog.c,v
retrieving revision 1.152
diff -u -p -r1.152 rcsprog.c
--- rcsprog.c   2 Oct 2014 06:23:15 -   1.152
+++ rcsprog.c   7 Oct 2014 15:08:39 -
@@ -235,8 +235,10 @@ rcs_main(int argc, char **argv)
lkmode = RCS_LOCK_STRICT;
break;
case 'l':
-   /* XXX - Check with -u flag. */
+   if (rcsflags & RCSPROG_UFLAG)
+   warnx("-u overridden by -l");
lrev = rcs_optarg;
+   rcsflags &= ~RCSPROG_UFLAG;
rcsflags |= RCSPROG_LFLAG;
break;
case 'm':
@@ -273,8 +275,10 @@ rcs_main(int argc, char **argv)
lkmode = RCS_LOCK_LOOSE;
break;
case 'u':
-   /* XXX - Check with -l flag. */
+   if (rcsflags & RCSPROG_LFLAG)
+   warnx("-l overridden by -u");
urev = rcs_optarg;
+   rcsflags &= ~RCSPROG_LFLAG;
rcsflags |= RCSPROG_UFLAG;
break;
case 'V':



Re: armv7: banana pi, Allwinner A20 board

2014-10-07 Thread SASANO Takayoshi
Hi,

> Did you try disabling ehci to see if that makes a difference?

Curiously, -c option in bootargs seems to be ignored.
I tried it both uEnv.txt and U-Boot console. Here is the log.
There is no problem to pass "-c" string to kernel.
What is happening?

Regards,


U-Boot SPL 2014.04-10694-g2ae8b32-dirty (Oct 01 2014 - 17:40:04)
Board: Bananapi
DRAM: 1024 MiB
CPU: 96000Hz, AXI/AHB/APB: 3/2/2
spl: not an uImage at 1600


U-Boot 2014.04-10694-g2ae8b32-dirty (Oct 01 2014 - 17:40:04) Allwinner 
Technology

CPU:   Allwinner A20 (SUN7I)
Board: Bananapi
I2C:   ready
DRAM:  1 GiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

In:serial
Out:   serial
Err:   serial
Net:   dwmac.1c5
Hit any key to stop autoboot:  0 
sun7i# setenv bootargs "sd0i:/bsd -c"
sun7i# printenv
autoboot=run loadkernel && run setargs && true && bootm 0x4800
baudrate=115200
boot_ram=saved_stdout=$stdout;setenv stdout nc;if iminfo 0x4100; then true; 
setenv stdout $saved_stdout; source 0x4100;else setenv stdout 
$saved_stdout;fi
bootargs=sd0i:/bsd -c
bootcmd=if run loadbootenv; then echo Loaded environment from ${bootenv};env 
import -t ${scriptaddr} ${filesize};fi;if test -n "${uenvcmd}"; then echo 
Running uenvcmd ...;run uenvcmd;fi;if run loadbootscr; then echo Jumping to 
${bootscr};source ${scriptaddr};fi;run autoboot;
bootdelay=2
bootenv=uEnv.txt
bootm_size=0x1000
bootscr=boot.scr
console=ttyS0,115200
device=mmc
ethact=dwmac.1c5
ethaddr=02:99:03:c2:d2:6e
kernel=uImage
loadbootenv=fatload $device $partition $scriptaddr ${bootenv} || ext2load 
$device $partition $scriptaddr boot/${bootenv} || ext2load $device $partition 
$scriptaddr ${bootenv}
loadbootscr=fatload $device $partition $scriptaddr ${bootscr} || ext2load 
$device $partition $scriptaddr boot/${bootscr} ||ext2load $device $partition 
$scriptaddr ${bootscr}
loadkernel=if bootpath=/boot/ && ext2load $device $partition 0x4300 
${bootpath}${script} && ext2load $device $partition 0x4800 
${bootpath}${kernel};then true; elif bootpath=/ && fatload $device $partition 
0x4300 ${script} && fatload $device $partition 0x4800 ${kernel};then 
true; elif bootpath=/ && ext2load $device $partition 0x4300 
${bootpath}${script} && ext2load $device $partition 0x4800 
${bootpath}${kernel};then true; else false;fi
loglevel=8
panicarg=panic=10
partition=0:1
script=script.bin
scriptaddr=0x4400
setargs=if test -z \\"$root\\"; then if test \\"$bootpath\\" = "/boot/"; then 
root="/dev/mmcblk0p1 rootwait"; else root="/dev/mmcblk0p2 rootwait"; fi; fi; 
setenv bootargs console=${console} root=${root} loglevel=${loglevel} 
${panicarg} ${extraargs}
stderr=serial
stdin=serial
stdout=serial

Environment size: 1943/131068 bytes
sun7i# mmc rescan
sun7i# fatload mmc 0 0x6000 bsd.umg
reading bsd.umg
7386496 bytes read in 364 ms (19.4 MiB/s)
sun7i# bootm 0x6000
## Booting kernel from Legacy Image at 6000 ...
   Image Name:   boot
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:7386432 Bytes = 7 MiB
   Load Address: 4080
   Entry Point:  4080
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

Starting kernel ...


OpenBSD/sunxi booting ...
arg0 0x0 arg1 0x10bb arg2 0x4100
atag core flags 0 pagesize 0 rootdev 0
atag cmdline [sd0i:/bsd -c]
atag mem start 0x4000 size 0x4000
bootfile: sd0i:/bsd
bootargs: -c
memory size derived from u-boot
bootconf.mem[0].address = 4000 pages 262144/0x4000
Allocating page tables
freestart = 0x40f0c000, free_pages = 258292 (0x0003f0f4)
IRQ stack: p0x40f3a000 v0xc0f3a000
ABT stack: p0x40f3b000 v0xc0f3b000
UND stack: p0x40f3c000 v0xc0f3c000
SVC stack: p0x40f3d000 v0xc0f3d000
Creating L1 page table at 0x40f0c000
Mapping kernel
Constructing L2 page tables
undefined page pmap [ using 170664 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2014 OpenBSD. All rights reserved.  http://www.OpenBSD.org

kernel does not support -c; continuing..
OpenBSD 5.6-current (RAMDISK-SUNXI) #0: Sun Oct  5 13:50:18 AEDT 2014
r...@armv7.jsg.id.au:/usr/src/sys/arch/armv7/compile/RAMDISK-SUNXI
real mem  = 1073741824 (1024MB)
avail mem = 1036165120 (988MB)
warning: no entropy supplied by boot loader
mainbus0 at root
cortex0 at mainbus0
ampintc0 at cortex0 nirq 160
cpu0 at mainbus0: ARM Cortex A7 rev 4 (ARMv7 core)
cpu0: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu0: 32KB(32b/l,2way) I-cache, 32KB(64b/l,4way) wr-back D-cache
sunxi0 at mainbus0: A20
sxipio0 at sunxi0
sxiccmu0 at sunxi0
sxitimer0 at sunxi0: ticktimer 100hz @ 32KHz
sxitimer1 at sunxi0: stattimer 128hz @ 32KHz
sxitimer2 at sunxi0: cntrtimer @ 32KHz
sxidog0 at sunxi0
sxirtc0 at sunxi0
sxiuart0 at sunxi0: console
sxiuart1 at sunxi0
sxiuart2 at sunxi0
sxiuart3 at sunxi0
sxiuart4 at sunxi0
sxiuart5 at sunxi0
sxiuart6 at sunxi0
sxiuart7 at sunxi0
sxie0 at 

Re: improving OpenBSD's gmac.c...

2014-10-07 Thread Christian Weisgerber
John-Mark Gurney:

> So, as I was working on FreeBSD's implementation of gmac.c, I noticed
> that I was able to get a significant speed up by using a mask instead
> of an if branch in ghash_gfmul in gmac.c from OpenBSD...
> 
> Add a mask var and replace the code between the comments
> "update Z" and "update V" w/:
> mask = !!(x[i >> 3] & (1 << (~i & 7)));
> mask = ~(mask - 1);
> 
> z[0] ^= v[0] & mask;
> z[1] ^= v[1] & mask;
> z[2] ^= v[2] & mask;
> z[3] ^= v[3] & mask;
> 
> And you should see a nice performance increase...

I tried this on a Soekris net6501-50 and the performance increase
was around 1.3%.  (I set up an ESP transport association with
AES-128-GMAC and pushed UDP traffic with tcpbench over it.)

A look at the generated amd64 assembly code shows that the change
indeed removes a branch.  What's pretty shocking is that this code

mul = v[3] & 1;
...
v[0] = (v[0] >> 1) ^ (0xe100 * mul);

is turned into an actual imul instruction by GCC.  I used the same
masking approach to get rid of the multiplication, but the improvement
was minuscule (<1%).

> I also have an implementation of ghash that does a 4 bit lookup table
> version with the table split between cache lines in p4 at:
> https://p4db.freebsd.org/fileViewer.cgi?FSPC=//depot/projects/opencrypto/sys/opencrypto/gfmult.c&REV=4

I'll have to look at this, but haven't there been increasing
misgivings about table implementations for GHASH because of timing
attacks?

-- 
Christian "naddy" Weisgerber  na...@mips.inka.de



Re: mpe patch: use rt_ifa_{add,del}

2014-10-07 Thread Rafael Zalamena
On Sat, Oct 04, 2014 at 07:39:03PM -0300, Rafael Zalamena wrote:
> On Thu, Oct 02, 2014 at 02:36:12PM +0200, Martin Pieuchot wrote:
> > On 01/10/14(Wed) 21:54, Rafael Zalamena wrote:
> > > --- old chat snip ---
> 

Code changed:
 * Replaced old function that used to create routes in favor of rt_ifa_*
 * Modified rt_ifa_{add,del} to handle MPLS addresses: when creating an
   route to a MPLS interface it means we want to remove labels. Also MPLS
   only works on rdomain 0

Here is the new diff based on mpi@ feedback:
Index: sys/net/if_mpe.c
===
RCS file: /cvs/src/sys/net/if_mpe.c,v
retrieving revision 1.35
diff -u -p -r1.35 if_mpe.c
--- sys/net/if_mpe.c22 Jul 2014 11:06:09 -  1.35
+++ sys/net/if_mpe.c7 Oct 2014 21:24:47 -
@@ -61,7 +61,6 @@ int   mpeioctl(struct ifnet *, u_long, cad
 void   mpestart(struct ifnet *);
 intmpe_clone_create(struct if_clone *, int);
 intmpe_clone_destroy(struct ifnet *);
-intmpe_newlabel(struct ifnet *, int, struct shim_hdr *);
 
 LIST_HEAD(, mpe_softc) mpeif_list;
 struct if_clonempe_cloner =
@@ -280,6 +279,7 @@ mpeioctl(struct ifnet *ifp, u_long cmd, 
int  error;
struct mpe_softc*ifm;
struct ifreq*ifr;
+   struct sockaddr_mpls smpls;
struct shim_hdr  shim;
 
ifr = (struct ifreq *)data;
@@ -331,12 +331,19 @@ mpeioctl(struct ifnet *ifp, u_long cmd, 
if (error)
break;
ifm = ifp->if_softc;
+   memset(&smpls, 0, sizeof(smpls));
+   smpls.smpls_family = AF_MPLS;
+   smpls.smpls_len = sizeof(smpls);
if (ifm->sc_shim.shim_label) {
/* remove old MPLS route */
-   mpe_newlabel(ifp, RTM_DELETE, &ifm->sc_shim);
+   smpls.smpls_label = ifm->sc_shim.shim_label;
+   rt_ifa_del(ifp->if_lladdr, RTF_MPLS | RTF_UP,
+   smplstosa(&smpls));
}
/* add new MPLS route */
-   error = mpe_newlabel(ifp, RTM_ADD, &shim);
+   smpls.smpls_label = shim.shim_label;
+   error = rt_ifa_add(ifp->if_lladdr, RTF_MPLS | RTF_UP,
+   smplstosa(&smpls));
if (error)
break;
ifm->sc_shim.shim_label = shim.shim_label;
@@ -346,8 +353,12 @@ mpeioctl(struct ifnet *ifp, u_long cmd, 
ifm = ifp->if_softc;
if (ifr->ifr_rdomainid != ifp->if_rdomain) {
if (ifm->sc_shim.shim_label) {
-   shim.shim_label = ifm->sc_shim.shim_label;
-   error = mpe_newlabel(ifp, RTM_ADD, &shim);
+   memset(&smpls, 0, sizeof(smpls));
+   smpls.smpls_label = ifm->sc_shim.shim_label;
+   smpls.smpls_family = AF_MPLS;
+   smpls.smpls_len = sizeof(smpls);
+   error = rt_ifa_add(ifp->if_lladdr,
+   RTF_MPLS | RTF_UP, smplstosa(&smpls));
}
}
/* return with ENOTTY so that the parent handler finishes */
@@ -442,38 +453,3 @@ mpe_input6(struct mbuf *m, struct ifnet 
splx(s);
 }
 #endif /* INET6 */
-
-int
-mpe_newlabel(struct ifnet *ifp, int cmd, struct shim_hdr *shim)
-{
-   struct rtentry *nrt;
-   struct sockaddr_mpls dst;
-   struct rt_addrinfo info;
-   int error;
-
-   bzero(&dst, sizeof(dst));
-   dst.smpls_len = sizeof(dst);
-   dst.smpls_family = AF_MPLS;
-   dst.smpls_label = shim->shim_label;
-
-   bzero(&info, sizeof(info));
-   info.rti_flags = RTF_UP | RTF_MPLS;
-   info.rti_mpls = MPLS_OP_POP;
-   info.rti_info[RTAX_DST] = smplstosa(&dst);
-   info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)ifp->if_sadl;
-
-   error = rtrequest1(cmd, &info, RTP_CONNECTED, &nrt, 0);
-   rt_missmsg(cmd, &info, error ? 0 : nrt->rt_flags, ifp, error, 0);
-   if (cmd == RTM_DELETE) {
-   if (error == 0 && nrt != NULL) {
-   if (nrt->rt_refcnt <= 0) {
-   nrt->rt_refcnt++;
-   rtfree(nrt);
-   }
-   }
-   }
-   if (cmd == RTM_ADD && error == 0 && nrt != NULL) {
-   nrt->rt_refcnt--;
-   }
-   return (error);
-}
Index: sys/net/route.c
===
RCS file: /cvs/src/sys/net/route.c,v
retrieving revision 1.185
diff -u -p -r1.185 route.c
--- sys/net/route.c 2 Oct 2014 12:21:20 -   1.185
+++ sys/net/route.c 7 Oct 2014 21:24:47 -
@@ -1100,6 +1100,11 @@ rt_ifa_add(struct ifaddr *ifa, int flags
info.rti

another ancient bug in head(1)

2014-10-07 Thread Ingo Schwarze
Hi,

while we are talking about ancient bugs in head(1), here is another one:

Without the patch:

   $ date | head /dev/null /dev/stdin  
  ==> /dev/null <==
  
  ==> /dev/stdin <==
   $

Oops, where did stdin go?  The reopen(3) function doesn't work here,
it first closes stdin, and then it's gone for good.

With the patch:

   $ date | ./obj/head /dev/null /dev/stdin
  ==> /dev/null <==
  
  ==> /dev/stdin <==
  Tue Oct  7 23:28:21 CEST 2014
   $

Actually, it's not me who found and fixed that bug.
Here is the original CSRG SCCS commit message:

  ^As 9/6/00145
  ^Ad D 5.7 92/03/04 14:35:42 bostic 9 8
  ^Ac can't use freopen; example is "date | head file1 /dev/stdin"

So Keith fixed that for 4.4BSD and we neglected to merge his fix
for more than 22 years.  Meanwhile, the code diverged slightly,
but my fix follows Keith's as closely as possible.

The tail(1) and cat(1) utilities also avoid the reopen(3) idiom
and use fp = fopen(...).

While here, remove a statement that is commented since November 14,
1987 - that is, for almost 27 years, it was already commented in
4.3BSD Tahoe.

OK?
  Ingo


Index: head.c
===
RCS file: /cvs/src/usr.bin/head/head.c,v
retrieving revision 1.17
diff -u -p -r1.17 head.c
--- head.c  7 Oct 2014 19:38:57 -   1.17
+++ head.c  7 Oct 2014 21:16:43 -
@@ -48,6 +48,7 @@ static void usage(void);
 int
 main(int argc, char *argv[])
 {
+   FILE*fp;
longcnt;
int ch, firsttime;
longlinecnt = 10;
@@ -81,13 +82,13 @@ main(int argc, char *argv[])
errx(1, "line count %s: %s", errstr, p);
}
 
-   /* setlinebuf(stdout); */
for (firsttime = 1; ; firsttime = 0) {
if (!*argv) {
if (!firsttime)
exit(status);
+   fp = stdin;
} else {
-   if (!freopen(*argv, "r", stdin)) {
+   if ((fp = fopen(*argv, "r")) == NULL) {
warn("%s", *argv++);
status = 1;
continue;
@@ -99,10 +100,11 @@ main(int argc, char *argv[])
}
++argv;
}
-   for (cnt = linecnt; cnt && !feof(stdin); --cnt)
-   while ((ch = getchar()) != EOF)
+   for (cnt = linecnt; cnt && !feof(fp); --cnt)
+   while ((ch = getc(fp)) != EOF)
if (putchar(ch) == '\n')
break;
+   fclose(fp);
}
/*NOTREACHED*/
 }



Re: mg: add bounce matching for [] and {}

2014-10-07 Thread Kjell Wooding
It should be noted, You can do that (without a code change) with an
appropriate chunk of code in your ~/.mg file.

(at least, that's how I have always done it)

On Tuesday, October 7, 2014, Stuart Cassoff  wrote:

> On 08/13/14 18:51, Brian Callahan wrote:
> > Hi tech --
> >
> > Diff below adds the bounce matching for [] and {} in mg like it does for
> ().
> > I miss having that from GNU Emacs, anyone else?
> >
> > OK?
> >
> > ~Brian
>
> Just noticed this yesterday. Thanks!
>
>
> Stu
>
>
>


Re: re(4) mtu >1500

2014-10-07 Thread Chris Cappuccio
I like MIMO/SISO better than 1x1 2x2 etc. Fix that shit :)

Stuart Henderson [st...@openbsd.org] wrote:
> On 2014/10/06 12:19, Chris Cappuccio wrote:
> > Stuart Henderson [s...@spacehopper.org] wrote:
> > > Does anyone have an idea of what's needed for working jumbos on the
> > > RL_FLAG_JUMBOV2 variants of re(4) where they're currently disabled?
> > > These seem to account for most of the chips seen in hardware
> > > designs from the last couple of years (including APU and some others).
> > > 
> > > if ((sc->rl_flags & RL_FLAG_JUMBOV2) == 0)
> > > ifp->if_hardmtu = sc->rl_max_mtu;
> > > 
> > 
> > I think the secrets are here :)
> > 
> > http://svnweb.freebsd.org/base/releng/10.1/sys/dev/re/if_re.c?revision=272461&view=markup
> > 
> 
> Ah, more specifically
> 
> http://svnweb.freebsd.org/base?view=revision&revision=217499 /
> http://svnweb.freebsd.org/base/head/sys/dev/re/if_re.c?r1=217498&r2=217499&pathrev=217499
> 
> OK that's probably more than I can figure out how to port without
> hardware then..

-- 
The bums will always lose



Re: improving OpenBSD's gmac.c...

2014-10-07 Thread John-Mark Gurney
Christian Weisgerber wrote this message on Tue, Oct 07, 2014 at 23:08 +0200:
> John-Mark Gurney:
> 
> > So, as I was working on FreeBSD's implementation of gmac.c, I noticed
> > that I was able to get a significant speed up by using a mask instead
> > of an if branch in ghash_gfmul in gmac.c from OpenBSD...
> > 
> > Add a mask var and replace the code between the comments
> > "update Z" and "update V" w/:
> > mask = !!(x[i >> 3] & (1 << (~i & 7)));
> > mask = ~(mask - 1);
> > 
> > z[0] ^= v[0] & mask;
> > z[1] ^= v[1] & mask;
> > z[2] ^= v[2] & mask;
> > z[3] ^= v[3] & mask;
> > 
> > And you should see a nice performance increase...
> 
> I tried this on a Soekris net6501-50 and the performance increase
> was around 1.3%.  (I set up an ESP transport association with
> AES-128-GMAC and pushed UDP traffic with tcpbench over it.)

Yeh, I benchmarked the raw algo in userland, not part of IPsec.  I
forget the resulting perf increase, but it was well more than 10-20%.

> A look at the generated amd64 assembly code shows that the change
> indeed removes a branch.  What's pretty shocking is that this code
> 
> mul = v[3] & 1;
> ...
> v[0] = (v[0] >> 1) ^ (0xe100 * mul);
> 
> is turned into an actual imul instruction by GCC.  I used the same
> masking approach to get rid of the multiplication, but the improvement
> was minuscule (<1%).

Hmm. interesting...  In my code I switched both to using the and
operator...

I also have code which switches the registers to 64bits so that on
amd64, we make better uses of registers, and on i386, the compilers
are good at breaking down the 64bit registers to 32bit w/o extra
work...

> > I also have an implementation of ghash that does a 4 bit lookup table
> > version with the table split between cache lines in p4 at:
> > https://p4db.freebsd.org/fileViewer.cgi?FSPC=//depot/projects/opencrypto/sys/opencrypto/gfmult.c&REV=4
> 
> I'll have to look at this, but haven't there been increasing
> misgivings about table implementations for GHASH because of timing
> attacks?

Well, the code avoids one issue but introduces another issue...  Each
table lookup accesses all four lines (assuming 64 byte cache lines), so
there isn't a problem there...  The issue intrroduded is that the first
64 bits of a cache line are faster to access than the remaining bits...

For more info, look at the NSS bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=868948

Though considering that the AES implementation that FreeBSD is still
using is the standard table based AES, there are also timing issues
there too...  Yes, no excuse for opening up additional windows...

I have thought about introducing an option of slow but secure and
fast but insecure against local attackers...  Since we are already
on the fast but insecure against local attackers path, I figured I'll
take the extra performance...

As with all things, there is a trade off between speed and security...
As most IPsec gateways don't have a local user trying to target the
key, this is less of an issue...  And even if they did, it'd probably
be easier to use a local root exploit to get the key than try to mount
a timing attack to extract a key that might change in an hour or a day...

-- 
  John-Mark Gurney  Voice: +1 415 225 5579

 "All that I will do, has been done, All that I have, has not."



my screen is too big

2014-10-07 Thread David Gwynne
vi gets upset if i maximise my terminal window. it might need to
go even bigger for 4k displays.

ok?

Index: common/options_f.c
===
RCS file: /cvs/src/usr.bin/vi/common/options_f.c,v
retrieving revision 1.7
diff -u -p -r1.7 options_f.c
--- common/options_f.c  27 Oct 2009 23:59:47 -  1.7
+++ common/options_f.c  8 Oct 2014 00:48:09 -
@@ -66,7 +66,7 @@ f_columns(sp, op, str, valp)
 * number of lines/columns for the screen, but at least we don't drop
 * core.
 */
-#defineMAXIMUM_SCREEN_COLS 500
+#defineMAXIMUM_SCREEN_COLS 768
if (*valp > MAXIMUM_SCREEN_COLS) {
msgq(sp, M_ERR, "041|Screen columns too large, greater than %d",
MAXIMUM_SCREEN_COLS);



Re: my screen is too big

2014-10-07 Thread Stuart Henderson
On 2014/10/08 10:49, David Gwynne wrote:
> vi gets upset if i maximise my terminal window. it might need to
> go even bigger for 4k displays.
> 
> ok?

ok with me, tested by setting xterm's font to "tiny" and making the window
twice as wide as my monitor.



pppoe(4), add example for ipv6

2014-10-07 Thread Stuart Henderson
Since it's non-obvious how to setup pppoe for v6 now that link-local
addresses are no longer configured by default, I think we should have
something in the manual.

Any comments/objections/suggestions for a better way to do this?

Index: man4/pppoe.4
===
RCS file: /cvs/src/share/man/man4/pppoe.4,v
retrieving revision 1.26
diff -u -p -r1.26 pppoe.4
--- man4/pppoe.417 Mar 2014 21:55:05 -  1.26
+++ man4/pppoe.48 Oct 2014 02:01:14 -
@@ -87,6 +87,8 @@ Configure authentication.
 The PPP session needs to identify the client to the peer.
 For more details on the available options see
 .Xr ifconfig 8 .
+.It
+If using IPv6, configure a link-local address.
 .El
 .Pp
 This all is typically accomplished using an
@@ -94,11 +96,13 @@ This all is typically accomplished using
 file.
 A typical file looks like this:
 .Bd -literal -offset indent
+inet6 eui64
 inet 0.0.0.0 255.255.255.255 NONE \e
pppoedev em0 authproto pap \e
authname 'testcaller' authkey 'donttell' up
 dest 0.0.0.1
 !/sbin/route add default -ifp pppoe0 0.0.0.1
+!/sbin/route add default -ifp pppoe0 fe80::
 .Ed
 .Pp
 The physical interface must also be marked



Re: armv7: banana pi, Allwinner A20 board

2014-10-07 Thread SASANO Takayoshi
Hi, here is the log using bsd.SUNXI.umg instead of bsd.rd.SUNXI.img.
(thanks to Theo)

"-c" invokes UKC, but hangs up at there.

--
OpenBSD/sunxi booting ...
arg0 0x0 arg1 0x10bb arg2 0x4100
atag core flags 0 pagesize 0 rootdev 0
atag cmdline [sd0i:/bsd -c]
atag mem start 0x4000 size 0x4000
bootfile: sd0i:/bsd
bootargs: -c
memory size derived from u-boot
bootconf.mem[0].address = 4000 pages 262144/0x4000
Allocating page tables
freestart = 0x40b9a000, free_pages = 259174 (0x0003f466)
IRQ stack: p0x40bc8000 v0xc0bc8000
ABT stack: p0x40bc9000 v0xc0bc9000
UND stack: p0x40bca000 v0xc0bca000
SVC stack: p0x40bcb000 v0xc0bcb000
Creating L1 page table at 0x40b9c000
Mapping kernel
Constructing L2 page tables
undefined page pmap [ using 300196 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2014 OpenBSD. All rights reserved.  http://www.OpenBSD.org

User Kernel Config
UKC> 

-- 
SASANO Takayoshi 



Re: pppoe(4), add example for ipv6

2014-10-07 Thread Brad Smith

On 07/10/14 10:03 PM, Stuart Henderson wrote:

Since it's non-obvious how to setup pppoe for v6 now that link-local
addresses are no longer configured by default, I think we should have
something in the manual.

Any comments/objections/suggestions for a better way to do this?


This doesn't make any sense. IPv6CP configures the link local address.
Having to do something like this is illogical and counter intuitive. I
agree it should be documented per se but the current behavior is just
plain stupid.

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



Re: another ancient bug in head(1)

2014-10-07 Thread Martin Natano
> Index: head.c
> ===
> RCS file: /cvs/src/usr.bin/head/head.c,v
> retrieving revision 1.17
> diff -u -p -r1.17 head.c
> --- head.c7 Oct 2014 19:38:57 -   1.17
> +++ head.c7 Oct 2014 21:16:43 -
> @@ -48,6 +48,7 @@ static void usage(void);
>  int
>  main(int argc, char *argv[])
>  {
> + FILE*fp;
>   longcnt;
>   int ch, firsttime;
>   longlinecnt = 10;
> @@ -81,13 +82,13 @@ main(int argc, char *argv[])
>   errx(1, "line count %s: %s", errstr, p);
>   }
>  
> - /* setlinebuf(stdout); */
>   for (firsttime = 1; ; firsttime = 0) {
>   if (!*argv) {
>   if (!firsttime)
>   exit(status);
> + fp = stdin;
>   } else {
> - if (!freopen(*argv, "r", stdin)) {
> + if ((fp = fopen(*argv, "r")) == NULL) {
>   warn("%s", *argv++);
>   status = 1;
>   continue;
> @@ -99,10 +100,11 @@ main(int argc, char *argv[])
>   }
>   ++argv;
>   }
> - for (cnt = linecnt; cnt && !feof(stdin); --cnt)
> - while ((ch = getchar()) != EOF)
> + for (cnt = linecnt; cnt && !feof(fp); --cnt)
> + while ((ch = getc(fp)) != EOF)
>   if (putchar(ch) == '\n')
>   break;
> + fclose(fp);
>   }
>   /*NOTREACHED*/
>  }
> 
Nice fix! Seems correct to me.

cheers,
natano