gov.nist.antd.diffserv
Class DiffServTrafficConditioner

java.lang.Object
  |
  +--SSF.OS.ProtocolSession
        |
        +--gov.nist.antd.diffserv.DiffServTrafficConditioner
All Implemented Interfaces:
com.renesys.raceway.DML.Configurable

public class DiffServTrafficConditioner
extends ProtocolSession

This class is the container class of Diffserv Traffic Handling.

  DiffServTrafficConditioner defines:
  (1) DiffServ packet classification with DiffServPacketClassifier for the 
         definition of the class-types, such as NCT, EF, AF and BF packet flow
      - DiffServ Flow, DiffServ class-type flow
  (2) DiffServ packet procession action profile
      - Meter: SRTCM, TRTCM
	    - Queue: Droptail, RED (Random Early Detection), RIO (RED with In/Out) 
           (under construction)
  (3) Packet scheduler
	    - packet scheduler: priority, WFQ, hybrid(WFQ-Priority)
	    - DataLinkMapping: to MPLS LSP or to normal IP packet forwarding
 
 
    public DiffServPacketClassifier Classifier;
    |
    +--> DiffServFlowTable(Vector) - DiffServFlowTable maintains DiffServFlow(class) infomations..
                |
                +--> DiffServFlow(class) has all of packet classsifier of a DiffServ Flow...
                        |
                        +--> DiffServCTFlowTable(Vector) - DiffServCTFlowTable maintains DiffServCTFlow(class) 
                                |				informations...
                                +--> DiffServCTFlow(class) has a packet classifier for a diffserv class type.. 
                                       and a DiffServPrfFlowProfile(class) information to perform  
                                       a metering, marking and queueing...

    public DiffServActionFlowProfile ActionProfile;
    |
    +--> FlowProfileTable(Hashtable, key : classtype(int))
             - FlowProfileTable maintains DiffServFlowProfile(class) informations...
                  |
                  +--> DiffServFlowProfile(class) has all of action profile of a DiffServ Flow....
                         |
                         +--> PrfFlowProfileTable(Vector) 
                              - PrfFlowProfileTable maintains DiffServPrfFlowProfile(class) informations..
                               |
                               +--> DiffServPrfFlowProfile(class)
                                     - It contains a DifServMeterMarker(class) and a DiffServQueue(class)
                                        for DiffServ Meter, Marker and Queue operations...

   public DiffServScheduler Scheduler;
    |
    +--> packetSchedulerTable(Vector)
           - packetSchedulerTable maintain all of DiffServPacketScheduler(class) informations..
              |
              +--> DiffServPacketScheduler(class) performs shcuduling functions for diffserv packets...
                     |
                     +--> QueueTable(Vector)
                             - QueueTable has all of Queue informations in the DiffServFlowProfile(class)
  

=============================================
General Flow of Packet Processing in DiffServ
=============================================

When a packet of a DiffServ flow arrives at the DiffServ-aware router, it is firstly recieved by the push() of DiffServTrafficConditioner, and processed by the IP_packet_arrived() method where the packetClassifier() of DiffServPacketClassifier is called and the information of the DiffServFlowProfile and the DiffServPrfFlowProfile are obtained. The DiffServPrfFlowProfile has the MeterAndQueuing() method that calls the Meter function to measure/policy the packet arrival rate, and enques the packet. The queue (Droptail, RED or RIO) drop or store the packet according to the queue status. The packets in the queue are dispatched by the DiffServ packet scheduler according to the MeanRate of Traffic Shaper.

 This class was developed at the National Institute of Standards and
 Technology by employees of the Federal Government in the course of
 their official duties. Pursuant to title 17 Section 105 of the United
 States Code this software is not subject to copyright protection and
 is in the public domain.
 NIST assumes no responsibility whatsoever for its use by other parties,
 and makes no guarantees, expressed or implied, about its quality,
 reliability, or any other characteristic.
 
We would appreciate acknowledgement if the software is used.
NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.

Author:
Young-Tak Kim
, Eun-Hyuk Lim , borchert

Field Summary
 DiffServActionFlowProfile ActionProfile
          Field ActionProfile - XXX
 DiffServPacketClassifier Classifier
          Field Classifier - XXX
 boolean debug
          Field debug - XXX
 com.renesys.raceway.DML.Configuration diffservCfg
          Field diffservCfg - XXX
 int DiffServFlowIDCount
          Field DiffServFlowIDCount - XXX
 DiffServMonitor dsMonitor
          Field dsMonitor - XXX
 java.lang.String ID
          Field ID - XXX
 boolean isMPLS
          Field isMPLS - XXX
 Host localHost
          Field localHost - XXX
 boolean logfile
          Field logfile - XXX
 Net net
          Field net - XXX
 java.io.File NodeLogDir
          Field NodeLogDir - XXX
 java.lang.String NodeLogDirName
          Field NodeLogDirName - XXX
 ProtocolSession PlatForm
          Field PlatForm - XXX
 double RunTime
          Field RunTime - XXX
 DiffServScheduler Scheduler
          Field Scheduler - XXX
 
Fields inherited from class SSF.OS.ProtocolSession
name, use
 
Constructor Summary
DiffServTrafficConditioner()
          Initialize DiffServ Flows at DiffServ-aware MPLS ingress LSR.
 
Method Summary
 void config_DSFlow(com.renesys.raceway.DML.Configuration cfg)
          Method config_DSFlow XXX
 void config(com.renesys.raceway.DML.Configuration cfg)
          Method config XXX
 void configDiffServ()
          Method configDiffServ
 double getTime()
          Method getTime
 void init()
          Method init
 boolean IP_packet_arrived(ProtocolMessage message, ProtocolSession fromSession)
          Method IP_packet_arrived XXX
 boolean push(ProtocolMessage message, ProtocolSession fromSession)
           
 void setupPlatForm(boolean ismpls, ProtocolSession ps)
          Method setupPlatForm XXX
 
Methods inherited from class SSF.OS.ProtocolSession
close, closed, debugIdentifier, inGraph, open, opened, pushAfterDelay, pushAfterDelayFailed, setGraph, version
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

localHost

public Host localHost
Field localHost - XXX


net

public Net net
Field net - XXX


ID

public java.lang.String ID
Field ID - XXX


Classifier

public DiffServPacketClassifier Classifier
Field Classifier - XXX


ActionProfile

public DiffServActionFlowProfile ActionProfile
Field ActionProfile - XXX


Scheduler

public DiffServScheduler Scheduler
Field Scheduler - XXX


dsMonitor

public DiffServMonitor dsMonitor
Field dsMonitor - XXX


diffservCfg

public com.renesys.raceway.DML.Configuration diffservCfg
Field diffservCfg - XXX


DiffServFlowIDCount

public int DiffServFlowIDCount
Field DiffServFlowIDCount - XXX


isMPLS

public boolean isMPLS
Field isMPLS - XXX


PlatForm

public ProtocolSession PlatForm
Field PlatForm - XXX


debug

public boolean debug
Field debug - XXX


logfile

public boolean logfile
Field logfile - XXX


NodeLogDir

public java.io.File NodeLogDir
Field NodeLogDir - XXX


NodeLogDirName

public java.lang.String NodeLogDirName
Field NodeLogDirName - XXX


RunTime

public double RunTime
Field RunTime - XXX

Constructor Detail

DiffServTrafficConditioner

public DiffServTrafficConditioner()
Initialize DiffServ Flows at DiffServ-aware MPLS ingress LSR. DiffServ Flow Profile is specified in DML file. A DiffServ-aware MPLS ingress LSR node may have multiple DiffServ Flows, where a DiffServ Flow is defined for - different source-destination address pair - same source-destination address pair but different flow handling for diffent protocol type or different ToS

Method Detail

config

public void config(com.renesys.raceway.DML.Configuration cfg)
            throws com.renesys.raceway.DML.configException
Method config XXX

Specified by:
config in interface com.renesys.raceway.DML.Configurable
Overrides:
config in class ProtocolSession
Parameters:
cfg - - XXX
Throws:
com.renesys.raceway.DML.configException

init

public void init()
          throws ProtocolException
Method init

Overrides:
init in class ProtocolSession
Throws:
ProtocolException

configDiffServ

public void configDiffServ()
Method configDiffServ


setupPlatForm

public void setupPlatForm(boolean ismpls,
                          ProtocolSession ps)
Method setupPlatForm XXX

Parameters:
ismpls - - XXX
ps - - XXX

config_DSFlow

public void config_DSFlow(com.renesys.raceway.DML.Configuration cfg)
                   throws com.renesys.raceway.DML.configException
Method config_DSFlow XXX

Parameters:
cfg - - XXX
Throws:
com.renesys.raceway.DML.configException

push

public boolean push(ProtocolMessage message,
                    ProtocolSession fromSession)
             throws ProtocolException
Specified by:
push in class ProtocolSession
ProtocolException

IP_packet_arrived

public boolean IP_packet_arrived(ProtocolMessage message,
                                 ProtocolSession fromSession)
                          throws ProtocolException
Method IP_packet_arrived XXX

Parameters:
message - - XXX
fromSession - - XXX
Returns:
boolean - XXX
Throws:
ProtocolException

getTime

public double getTime()
Method getTime

Returns:
double - XXX