Subject: isi-rsvp and multiple TC types

From: "Simon Oosthoek (ELN)" <[email-masked]>
Date: Wed, 14 Nov 2001 16:28:32 +0100

Hi

I'm trying to understand how to have a node with different Traffic Control (TC) operations on different interfaces... Right now I don't think this is possible, but I have a proposal to add this feature to the RSVP implementation...

My platform is Linux, so that is the base from which I'm coding...

My questions to you are:
do you think this is the right way to do it?
has it been done before?
(and if so, is it available somewhere?)

This could be used for altq, mpls and whatever else people can think of 
to do Traffic Control for RSVP...

Any feedback (and help) is appreciated!

Cheers

Simon

------------------------------------------------
Proposal to adapt ISI rsvpd to enable different Traffic Control (TC) 
interfaces on different network interfaces.

Problem description:

current rsvpd implementation doesn't support different TC implementations on
different interfaces. This is because it assumes only one TC functionality
module (rsvp_LLkern.c) is linked into the rsvpd executable.

Desired functionality:

We would like to be able to specify a different TC for each network
interface in a configuration file. For this we would need to link several
different modules with their own TC functionality into the rsvpd. Since the
rsvpd already uses a functionpointerlist per interface (IF) to call the TC
functions, this only requires a different list to be initialised per IF.

So if we specify something like (in the rsvpd config file):
tc_if	eth0	newtype
tc_if	eth1	test
tc_if	eth2	linux

we would get three different sets of functionpointertables, one for each
interface. Each interface can have its own TC statebase (TCSB).

Design Overview:

In order to add this functionality the following modifications are
necessary:

- rsvp_main.c must be modified to support the new options in the
  configuration file. And it must somehow initialise the function table per
  IF so it points to the right functions for that IF.

- The rsvp_LLKern.c module must be adapted to support multiple instances of
  itself in the rsvpd. That means that all the functionnames must be unique
  for a specific TC. The names should be modified to something with the name
  of the TC functionality in it (e.g. Newtype_TC_Newflow, Test_TC_Newflow, etc.)

- Any sub-modules of LLkern need to have unique identifiers as well

affected files:

rsvp_main.c:
- reads config file
- calls init
- inits KernTC_init

rsvp_var.h:
- defines if_rec,  LLDAL_calls_t (the pointers to the LLKern functions) and
   macros to ease their use.

rsvp_TCif.h:
- currently defines templates for <type> specific module functions
- defines TCSB structure

rsvp_LLKern.c:
- is currently a "generic" module to interface with *specific* <type> TC
  modules (called tc_<type>.c with rsvp_TCif.h as header files.

tc_<type>.c:
- <type> specific implementation of flow based activities

Proposed Modifications:

The goal is to make it easy to add new interfacetypes to rsvpd. The
modifications to rsvp_main.c/rsvp_var.h should be minor for each additional
interface.

based on the interface configuration file, rsvp_main should call the right
KernTC_<type>_if_init(). This function is defined in each
rsvp_LLKern_<type>.c file. This file has functions in the form:
KernTC_<type>_<Action>() which have a fixed parameter definition for each
<action>. This LLKern_<type> file interfaces specifically with the
tc_<type>.c file and TCif_<type>.h file.

All function names MUST be unique in order to be able to link all the
different <type> files together in the rsvpd executable.