On 22/06/2011, at 3:52 AM, Stefan Rinkes wrote: > Hi, > > while playing around with carp and pfsync I spotted > two minor bugs. > > 1. Not all pfstate flags are synced, cause pfsync uses > u_int8_t, while pf uses u_int16_t for state_flags. > Currently that means PFSTATE_SCRUB_TCP flags don't > get synced. > > retrieving revision 1.333 > diff -u -p -r1.333 pfvar.h > --- sys/net/pfvar.h 20 Jun 2011 19:03:41 -0000 1.333 > +++ sys/net/pfvar.h 21 Jun 2011 17:33:31 -0000 > @@ -892,13 +892,13 @@ struct pfsync_state { > u_int8_t proto; > u_int8_t direction; > u_int8_t log; > - u_int8_t state_flags; > + u_int16_t state_flags; > u_int8_t timeout; > u_int8_t sync_flags; > u_int8_t updates; > u_int8_t min_ttl; > u_int8_t set_tos; > - u_int8_t pad[4]; > + u_int8_t pad[3]; > } __packed; > > #define PFSYNC_FLAG_SRCNODE 0x04
this diff is not ok. you changed the wire format, didnt considering endianness, and it looks like you put a multibyte value on an unaligned boundary. i'll have a look at the missing flags problem myself in the next few days. > 2. If you are using IP balanced carp and set one of > the interface to down, the mbufs still reach pf. > Cause carp_ourether() returns NULL if the interface > is down and the mbufs gets copied by carp_input(), > cause the M_MCAST flag is set. The copied mbuf is > dropped in ether_input() since the carp interface is down > and the original mbuf reaches the pf. IMHO carp should always > take care of mbufs with his MAC address, else the machine has > to do some unnecessary work. > > retrieving revision 1.184 > diff -u -p -r1.184 ip_carp.c > --- sys/netinet/ip_carp.c 4 May 2011 16:05:49 -0000 1.184 > +++ sys/netinet/ip_carp.c 21 Jun 2011 17:34:42 -0000 > @@ -1514,9 +1514,7 @@ carp_ourether(void *v, struct ether_head > > TAILQ_FOREACH(vh, &cif->vhif_vrs, sc_list) { > struct carp_vhost_entry *vhe; > - if ((vh->sc_if.if_flags & (IFF_UP|IFF_RUNNING)) != > - (IFF_UP|IFF_RUNNING)) > - continue; > + > if (vh->sc_balancing == CARP_BAL_ARP) { > LIST_FOREACH(vhe, &vh->carp_vhosts, vhost_entries) > if (vhe->state == MASTER && > this looks reasonable to me. mcbride, mpf, could you chip in on this? dlg