tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Help to assess proposal on {Create an in-kernel API for "packet classes"}



Hi,

I am Indradip, a Grad student at University of Texas at Arlington.
 I am interested to work on the project {Create an in-kernel API for
"packet classes"} .My proposal is as follows:


Project Goal:

To create an in-kernel API for registering "packet classes" and for
labeling packets
with their class, for special treatment by traffic shapers (ALTQ) and by network
interface drivers. Such an approach would entitle network devices support varies
 class of service (CoS) based on pre-determined packet transmission priority.


Approach

      (a) PF Packet Filter (PF) is a software program for manipulating
actions on packets being
      transmitted and received by the NetBSD kernel. PF uses a
configuration file (pf.conf(5))
       for reading in the rules that it needs to apply to the network
packets. Among its many
       abilities, PF allows a packet to be tagged or marked based on
the input ruleset.
      Additionally, tags are sticky; implying once a packet is tagged,
the tag can only be
      replaced by a subsequent ruleset but can never be removed. Thus,
the flow of packets
      inside the kernel can be represented as:

      apps_data -> kernel packet -> { PF rules -> tagged packets ->
Actions} -> packets (!dropped)

      (b) However, as clear from the above action, the meaning of the
tag is lost as soon the packet
          exits the PF environment. Thus, PF has no knowledge of the
device driver queue capabilities.
          The only exception is the ALTQ implementation which is
integrated with the PF subsystem.
           This allows the PF to implement various interface queuing policies.

      (c) One way to handle such 'lost information' is to translate PF
tags to languages understood
           by the device driver. The glue for such an approach is the
packet class framework (PCF) being
           proposed in this project.

      (d) (i) Packet Class Framework (PCF): The object of PCF is to
mark packets with tokens as they leave the
          PF subsystem. Tokens are the driver capabilities that are
registered during driver_init ().
          For example, an ethernet NIC with high and low-priority
transmit rings may register classes
          called 'hipri'(2) and 'lopri' (1). These will generate
tokens t0 and t1 corresponding to 'hipri' and 'lopri'.

          Note that these tokens are predefined data structure that
the driver simply needs to instantiate.

                    typedef struct all_tokens {
                               char *drivername; // filled by the driver
                              char *interface; // filled by the kernel
                              struct token driver_token; // list of
all tokens with priority
                       }

         (ii) Once the PCF knows the token names and their
corresponding priority, it needs to match these
            with the PC tags. Note that tags are defined based on
rulesets. However, there is a catch. Since
            the tokens are driver specific, there appers to be
standard way of defining the tag-token matching
            grammar.

          (iii) To solve this dilemma, whenever the deriver
initializes, the PCF will write the tokens with priorities
            under /dev/pcf/<if_name>. These tokens must be used in the
ruleset of PF.

          (iv) Since packets generated from the kernel are mbuf
structures, packets matching the rulesets
          will have the tokenens inserted in the "token" field of the
mbuf. This token field is new and will enable
          the driver to associate priority with the token type.

         Please let me know if you have some clarifications/ comments/
suggestions in this respect and would
         greatly appreciate if you could throw light on any issue that
I have failed to address.


         Best Regards,
         Indradip.


Home | Main Index | Thread Index | Old Index