I think an interesting example that people are fishing for below is
any ethernet broadcast packet going through an openbsd bridge,
one packet goes out many (all) interfaces.

Of course, which do you allow the reply from?

Even worse is when you have:
client->(bridge0)->router->(bridge1)->server

Now a packet can not only get replies from any interface in bridge0,
but can generate state *twice*, once per bridge.
ATM this doesn't work - bridge1 packets are dropped as dups.

So if PF needs to understand what i/f a reply can come from, it that
needs to also tag the state with the right bridge info.

Dom
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Dom De Vitto                                       Tel. 07855 805 271
http://www.devitto.com                         mailto:[EMAIL PROTECTED]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
Of Alexey E. Suslikov
Sent: Tuesday, August 05, 2003 8:27 AM
To: Daniel Hartmeier
Cc: [EMAIL PROTECTED]
Subject: Re[2]: pf and altq couple: before and after merge


Tuesday, August 5, 2003, 12:36:02 AM, Daniel Hartmeier wrote:

> On Mon, Aug 04, 2003 at 11:35:13PM +0300, Alexey E. Suslikov wrote:

>> keepstated connection's packets silently pass all interfaces and all 
>> directions, so we just can't REASSEMBLE the queue to take control 
>> over them. the only controllable option is the connection's state. 
>> but there are TOO MANY packets matching this STATE and they are 
>> DIFFERENT.

> Given that there is no working multipath routing in OpenBSD, all 
> packets of one forwarded connection usually enter through one 
> interface and leave through one other interface. At least in my simple

> corner of the world :)

hmmm... you can dup-to them to multiple destinations.

> If you want, you can create state on both interfaces, there's nothing 
> wrong or obscure about that. A forwarded packet will match one of the 
> states on the incoming interface and the other on the outgoing. You 
> can queue to two different queues (one for each interface) with those 
> two states.

yes, i already heard previously: "it is possible to have multiple states
for the same connection". but this mechanics needed to be explained.

this is your "Prioritizing empty TCP ACKs with pf and ALTQ" example:

ext_if="kue0"
altq on $ext_if priq bandwidth 100Kb queue { q_pri, q_def } queue q_pri
priority 7 queue q_def priority 1 priq(default) pass out on $ext_if
proto tcp from $ext_if to any flags S/SA \
        keep state queue (q_def, q_pri) # 01
pass in  on $ext_if proto tcp from any to $ext_if flags S/SA \
        keep state queue (q_def, q_pri) # 02

"Both incoming and outgoing TCP connections will pass by those two
rules, create state, and all packets related to the connections will be
assigned to either the q_def or q_pri queues. Packets assigned to the
q_pri queue will have priority and will get sent before any pending
packets in the q_def queue". this is your statement.
        
assume we have incoming packet matching rule 02. after this we will have
"keepstated by the rule 02" connection which will not match any rules
lately, because it will silenty pass as of keepstated nature. this is my
statement. but this is wrong statement as i know what "it is possible to
have multiple states for the same connection". i just want to remove
this contradiction. please, explain.

> ALTQ doesn't queue incoming packets (they are processed immediately, 
> as they arrive), so you can only queue outgoing packets on those two 
> interfaces (that was true before the pf/altq merge, too).

just for example: incoming packet on some ext0 and outgoing on some int0
- the same packet. you can't queue it on the ext0, but can on the int0.

> You could split your packet filter and ALTQ setup into two separate 
> machines, the first one doing the packet filtering statefully, the 
> second one using pf completely statelessly just to do the ALTQ 
> classification. It would be forced to create states and assign all

see PREFACE in my original post: there are no questions about stateless.

> Maybe (very likely, even) I'm just doing simple and naive 
> classifications, can you give an example of setup that you wanted to 
> do but would require splitting the stateful filtering and 
> classification? Something with a real and common use, not some 
> far-fetched theoretical example?



Reply via email to