Lines 402-407
static int
Link Here
|
402 |
pfsync_state_import(struct pfsync_state *sp, u_int8_t flags) |
402 |
pfsync_state_import(struct pfsync_state *sp, u_int8_t flags) |
403 |
{ |
403 |
{ |
404 |
struct pfsync_softc *sc = V_pfsyncif; |
404 |
struct pfsync_softc *sc = V_pfsyncif; |
|
|
405 |
#ifndef __NO_STRICT_ALIGNMENT |
406 |
struct pfsync_state_key key[2]; |
407 |
#endif |
408 |
struct pfsync_state_key *kw, *ks; |
405 |
struct pf_state *st = NULL; |
409 |
struct pf_state *st = NULL; |
406 |
struct pf_state_key *skw = NULL, *sks = NULL; |
410 |
struct pf_state_key *skw = NULL, *sks = NULL; |
407 |
struct pf_rule *r = NULL; |
411 |
struct pf_rule *r = NULL; |
Lines 451-462
pfsync_state_import(struct pfsync_state *sp, u_int
Link Here
|
451 |
if ((skw = uma_zalloc(V_pf_state_key_z, M_NOWAIT)) == NULL) |
455 |
if ((skw = uma_zalloc(V_pf_state_key_z, M_NOWAIT)) == NULL) |
452 |
goto cleanup; |
456 |
goto cleanup; |
453 |
|
457 |
|
454 |
if (PF_ANEQ(&sp->key[PF_SK_WIRE].addr[0], |
458 |
#ifndef __NO_STRICT_ALIGNMENT |
455 |
&sp->key[PF_SK_STACK].addr[0], sp->af) || |
459 |
bcopy(&sp->key, key, sizeof(struct pfsync_state_key) * 2); |
456 |
PF_ANEQ(&sp->key[PF_SK_WIRE].addr[1], |
460 |
kw = &key[PF_SK_WIRE]; |
457 |
&sp->key[PF_SK_STACK].addr[1], sp->af) || |
461 |
ks = &key[PF_SK_STACK]; |
458 |
sp->key[PF_SK_WIRE].port[0] != sp->key[PF_SK_STACK].port[0] || |
462 |
#else |
459 |
sp->key[PF_SK_WIRE].port[1] != sp->key[PF_SK_STACK].port[1]) { |
463 |
kw = &sp->key[PF_SK_WIRE]; |
|
|
464 |
ks = &sp->key[PF_SK_STACK]; |
465 |
#endif |
466 |
|
467 |
if (PF_ANEQ(&kw->addr[0], &ks->addr[0], sp->af) || |
468 |
PF_ANEQ(&kw->addr[1], &ks->addr[1], sp->af) || |
469 |
kw->port[0] != ks->port[0] || |
470 |
kw->port[1] != ks->port[1]) { |
460 |
sks = uma_zalloc(V_pf_state_key_z, M_NOWAIT); |
471 |
sks = uma_zalloc(V_pf_state_key_z, M_NOWAIT); |
461 |
if (sks == NULL) |
472 |
if (sks == NULL) |
462 |
goto cleanup; |
473 |
goto cleanup; |
Lines 468-485
pfsync_state_import(struct pfsync_state *sp, u_int
Link Here
|
468 |
pfsync_alloc_scrub_memory(&sp->dst, &st->dst)) |
479 |
pfsync_alloc_scrub_memory(&sp->dst, &st->dst)) |
469 |
goto cleanup; |
480 |
goto cleanup; |
470 |
|
481 |
|
471 |
/* copy to state key(s) */ |
482 |
/* Copy to state key(s). */ |
472 |
skw->addr[0] = sp->key[PF_SK_WIRE].addr[0]; |
483 |
skw->addr[0] = kw->addr[0]; |
473 |
skw->addr[1] = sp->key[PF_SK_WIRE].addr[1]; |
484 |
skw->addr[1] = kw->addr[1]; |
474 |
skw->port[0] = sp->key[PF_SK_WIRE].port[0]; |
485 |
skw->port[0] = kw->port[0]; |
475 |
skw->port[1] = sp->key[PF_SK_WIRE].port[1]; |
486 |
skw->port[1] = kw->port[1]; |
476 |
skw->proto = sp->proto; |
487 |
skw->proto = sp->proto; |
477 |
skw->af = sp->af; |
488 |
skw->af = sp->af; |
478 |
if (sks != skw) { |
489 |
if (sks != skw) { |
479 |
sks->addr[0] = sp->key[PF_SK_STACK].addr[0]; |
490 |
sks->addr[0] = ks->addr[0]; |
480 |
sks->addr[1] = sp->key[PF_SK_STACK].addr[1]; |
491 |
sks->addr[1] = ks->addr[1]; |
481 |
sks->port[0] = sp->key[PF_SK_STACK].port[0]; |
492 |
sks->port[0] = ks->port[0]; |
482 |
sks->port[1] = sp->key[PF_SK_STACK].port[1]; |
493 |
sks->port[1] = ks->port[1]; |
483 |
sks->proto = sp->proto; |
494 |
sks->proto = sp->proto; |
484 |
sks->af = sp->af; |
495 |
sks->af = sp->af; |
485 |
} |
496 |
} |