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

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 &&


Greetz Stefan

Reply via email to