s i s t e m a o p e r a c i o n a l m a g n u x l i n u x | ~/ · documentação · suporte · sobre |
Next
Previous
Contents
11. More classifiers
Classifiers are the way by which the kernel decides which queue a packet should be placed into. There are various different classifiers, each of which can be used for different purposes.
Note that in general there are many ways in which you can classify packet and that it generally comes down to preference as to which system you wish to use. Classifiers in general accept a few arguments in common. They are listed here for convenience:
All the following sections will assume you are trying to shape the traffic
going to
11.1 The "fw" classifierThe "fw" classifier relies on the firewall tagging the packets to be shaped. So, first we will setup the firewall to tag them:
Now all packets to that machine are tagged with the mark 1. Now we build the packet shaping rules to actually shape the packets. Now we just need to indicate that we want the packets that are tagged with the mark 1 to go to class 1:1. This is accomplished with the command:
This should be fairly self-explanatory. Attach to the 1:0 class a filter with priority 1 to filter all packet marked with 1 in the firewall to class 1:1. Note how the handle here is used to indicate what the mark should be. That's all there is to it! This is the (IMHO) easy way, the other ways are I think harder to understand. Note that you can apply the full power of the firewalling code with this classifier, including matching MAC addresses, user IDs and anything else the firewall can match.
11.2 The "u32" classifierThe U32 filter is the most advanced filter available in the current implementation. It entirely based on hashing tables, which make it robust when there are many filter rules. In its simplest form the U32 filter is a list of records, each consisting of two fields: a selector and an action. The selectors, described below, are compared with the currently processed IP packet until the first match and the associated action is performed. The simplest type of action would be directing the packet into defined CBQ class. The commandline of
The The options decribed apply to all filters, not only U32.
U32 selectorThe U32 selector contains definition of the pattern, that will be matched to the currently processed packet. Precisely, it defines which bits are to be matched in the packet header and nothing more, but this simple method is very powerful. Let's take a look at the following examples, taken directly from a pretty complex, real-world filter:
For now, leave the first line alone - all these parameters describe
the filter's hash tables. Focus on the selector line, containing
The
Having understood all the above, we will find the following selector
quite easy to read:
General selectorsGeneral selectors define the pattern, mask and offset the pattern will be matched to the packet contents. Using the general selectors you can match virtually any single bit in the IP (or upper layer) header. They are more difficult to write and read, though, than specific selectors that described below. The general selector syntax is:
One of the keywords
Some examples:
Packet will match to this rule, if its time to live (TTL) is 64. TTL is the field starting just after 8-th byte of the IP header.
This rule will only match TCP packets with ACK bit set. Here we can see
an example of using two selectors, the final result will be logical AND
of their results. If we take a look at TCP header diagram, we can see
that the ACK bit is second older bit (0x10) in the 14-th byte of the TCP
header (
Specific selectorsThe following table contains a list of all specific selectors
the author of this section has found in the FIXME: table placeholder - the table is in separate file ,,selector.html'' FIXME: it's also still in Polish :-( FIXME: must be sgml'ized Some examples:
The above rule will match packets, which have the TOS field set to 0x10.
The TOS field starts at second byte of the packet and is one byte big,
so we coul write an equivalent general selector:
11.3 The "route" classifier
This classifier filters based on the results of the routing tables. When a packet that is traversing through the classes reaches one that is marked with the "route" filter, it splits the packets up based on information in the routing table.
Here we add a route classifier onto the parent node 1:0 with priority 100. When a packet reaches this node (which, since it is the root, will happen immediately) it will consult the routing table and if one matches will send it to the given class and give it a priority of 100. Then, to finally kick it into action, you add the appropriate routing entry: The trick here is to define 'realm' based on either destination or source. The way to do it is like this:
For instance, we can define our destination network 192.168.10.0 with a realm number 10:
When adding route filters, we can use realm numbers to represent the networks or hosts and specify how the routes match the filters.
The above rule says packets going to the network 192.168.10.0 match class id 1:10. Route filter can also be used to match source routes. For example, there is a subnetwork attached to the Linux router on eth2.
Here the filter specifies that packets from the subnetwork 192.168.2.0 (realm 2) will match class id 1:2.
11.4 The "rsvp" classifierFIXME: Fill me in
11.5 The "tcindex" classifierFIXME: Fill me in
Next Previous Contents |