AAAARCH Research Group
INTERNET DRAFT
Category: Experimental S.M.C.M. van Oudenaarde
L.H.M. Gommans
C.T.A.M. de Laat
F. Dijkstra
A. Taal
March 2004
Prototype of a Generic AAA Server
draft-irtf-aaaarch-prototype-00.txt
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC 2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other
documents at any time. It is inappropriate to use Internet-Drafts
as reference material or to cite them other than as "work in
progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This memo describes work in progress within the AAAARCH Research
Group. Comments are welcome and should be submitted to
aaaarch@fokus.gmd.de.
Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2004). All Rights Reserved.
Oudenaarde et al. Expires: September 2004 [Page 1]
Experimental RFC Prototype of a Generic AAA Server March 2004
Abstract
In this document a prototype of an AAA (Authentication,
Authorization, Accounting) server is presented. The prototype is
build in accordance with the RFCs 2903, 2904 and 2905.
As the AAA concept is a multi-tier concept we have chosen for JAVA
Enterprise Beans (J2EE) to build the prototype. New techniques
and protocols supported by the J2EE platform are discussed. Web
service standards like SOAP are explored. A general architecture
of an AAA server is outlined in Enterprise JavaBeans (EJB)
component architecture.
Table of Contents
Status of this Memo . . . . . . . . . . . . . . . . . . . . . . 1
Copyright Notice . . . . . . . . . . . . . . . . . . . . . . . 1
Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 3
2. Generic AAA Architecture . . . . . . . . . . . . . . . . . . 3
2.1 Agent, pull and push sequences . . . . . . . . . . . . . . 4
2.1.1 The agent sequence . . . . . . . . . . . . . . . . . . . 4
2.1.2 The 'push' and 'pull' sequence . . . . . . . . . . . . 5
3. The demo setup . . . . . . . . . . . . . . . . . . . . . . . 5
4. Implementation details . . . . . . . . . . . . . . . . . . . 6
4.1 AAA Requests in the Generic AAA Architecture . . . . . . . 6
4.2 Interface(s) . . . . . . . . . . . . . . . . . . . . . . . 8
4.3 Driving Policy . . . . . . . . . . . . . . . . . . . . . . 9
4.4 ASM Framework . . . . . . . . . . . . . . . . . . . . . . 10
4.5 Session . . . . . . . . . . . . . . . . . . . . . . . . . 11
5. Conclusions and suggestions for further research . . . . . 11
Appendix A . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Appendix B . . . . . . . . . . . . . . . . . . . . . . . . . . 13
References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 16
Oudenaarde et al. Expires: September 2004 [Page 2]
Experimental RFC Prototype of a Generic AAA Server March 2004
1. Introduction
The RFCs 2903, 2904 and 2905 describe the concept of AAA,
Authentication, Authorization and Accounting. These RFCs were a
product of the AAAARCH research group of the IRTF. As members of
this research group we present a prototype of an AAA server in
accordance with these RFCs. We have chosen for the J2EE platform
that offers a multitiered distributed application model. The J2EE
environment offers support for Extensible Markup Language (XML)-
based data interchange, flexible transaction control, an unified
security model, and Web services that are based on SOAP and
HTTP. Several key parts of the AAA concept, not specified in the
above mentioned RFCs, are introduced. One newly introduced key
part is a so called AAA Driving Policy. For each request an AAA
server understands there exists a corresponding Driving Policy
that is evaluated. The main task of a Driving Policy is to
describe which pre-conditions have to be checked before actions,
needed to fulfill an incoming AAA request, are delegated to
Application Specific Modules. AAA requests are expressed in XML
whereas Driving Polices are expressed in a special policy language
(see Appendix A). AAA servers will be specialized in delivering
certain kind of services. Support for WSDL, an XML format for
describing network or web services, and support for UDDI, a meta
service for discovering network or web services, are integrated
into the AAA concept. These techniques give clients the
possibility to discover to which AAA server they should address
what kind of request in order to get the service of their desire
delivered. Part of the J2EE platform is the Enterprise JavaBeans
(EJB) standard. This is a component architecture for deployable
server-side components in Java. The generic AAA server is build
of EJB components, Session Beans and Entity Beans.
2. Generic AAA Architecture
Before discussing implementation details we will outline an
abstract view of the Generic AAA Architecture. The Generic AAA
Architecture comprises of four major components, fig. 1. An AAA
Request is any kind of message that asks for a service.
When a Generic AAA Server receives an AAA Request it will initiate
the evaluation of a policy, a so-called Driving Policy. This
Driving Policy instructs the Generic AAA Server what conditions
need to be checked before certain Service Equipment is told to do
something. Service Equipment can be anything, like switches,
routers, bandwidth brokers, network access equipment, remote
instrumentation, etc. The ASM, Application Specific Module, forms
an API to communicate with the Service Equipment. So an
Application Specific Module is a component of an AAA Server that
allows Driving Policies to influence Service Equipment.
There exists a tight relationship between AAA Requests, Driving
Policies, and Application Specific Modules. Firstly, AAA Requests
and Driving Policies have a one-to-one and onto relationship.
Oudenaarde et al. Expires: September 2004 [Page 3]
Experimental RFC Prototype of a Generic AAA Server March 2004
+-------------+
|+-------------+
+| AAA Request |
+-------------+
/\
/ \
/ \
/ \
/ \
/ Generic \
/ AAA \
/--------------\
+----------------+ +-------+
|+----------------+ |+-------+
+| Driving Policy | +| ASM |
+----------------+ +-------+
Fig. 1 Components of the Generic AAA Architecture
Based on the request type, the AAA server to retrieve the Driving
Policy that needs evaluation. All actions in a Driving Policy
refer either to a generic function the Generic AAA is equipped
with or to an Application Specific Module.
2.1 Agent, pull and push sequences
In RFC 2904 "AAA Authorization Framework" three authorization
sequences are described, the 'agent', the 'pull', and the 'push'
sequence. In these sequences it is the Service Equipment, the
device that actually delivers the service requested, that
determines the authorization sequence.
2.1.1 The agent sequence
In the agent sequence (fig. 2), the AAA Server functions as an
agent between the User and the Service Equipment (SE). The User
sends a Request to the AAA Server (1). The Interface unpacks the
Request and sends it to a Rule Based Engine (RBE) (2). Before the
RBE will retrieve the corresponding Driving Policy and Reply from
the Policy Repository (PR) (4), it asks for a new Session to be
created (3). Instructed by the Driving Policy the RBE calls one
or more ASMs (5) and passes the arguments needed. While an AAA
server has exactly one RBE defined, and one Session Manager, it may
have multiple ASMs at its disposal. Arguments passed to an ASM may
originate from the incoming request or from values returned by
previous calls. These arguments might be needed by the Service
Equipement the ASM interfaces to (6). Values returned by an ASM
(7) may also be inserted into the Reply to the User. Once the
Driving Policy has been decided the Reply is returned to the User
(8,9). When there is no need for the Session Manager to keep the
Oudenaarde et al. Expires: September 2004 [Page 4]
Experimental RFC Prototype of a Generic AAA Server March 2004
information of this Session into persistent storage after the
User received an answer, the Session Manager might write that
information into a log file.
..............................................
: :
+------+ : +-----------+ AAA :
| |---1---->| | :
| User | : | Interface | :
| |<--9-----| | :
+------+ : +-----------+ +-------- + :
: ^ | | Session | :
: | | ->| Manager | :
: 8 2 / +---------+ :
: | v 3 :
: +------+ / :
: | |<--/ +------+ :
: | RBE |----5---->| ASM |+ :
: | |<---7-----| || :
: +------+ +------+| :
: ^ +^----+ :
: 4 | 6 | :
:.........|................|.................:
v v
+-----+ +-----+
| PR | | SE |
+-----+ +-----+
Fig. 2 Schematic view of an agent sequence.
2.1.2 The 'push' and 'pull' sequence
In the 'pull' sequence, as defined in [RFC 2904], the User sends a
service request to the Service Equipment, which forwards it to an
AAA Server. The AAA Server evaluates the request and returns an
appropriate response to the Service Equipment, which sets up the
service and tells the User it is ready. Here the Service
Equipement sends an AAA Request to the AAA Server. In general the
the User and Service Equipment apply a different protocol, and the
Service Equipement has to translate the request from the User and
the Reply from the AAA Server. In the 'push' sequence it is the
User that in general applies two different protocls. There the
User gets from an AAA Server a ticket or certificate verifying that
it is o.k. for the User to have access to a Service Equipment.
3. The demo setup
The AAA server build of EJB components and discussed below is
applied in the following setup (fig. 3). We setup a QoS (Quality
of Service) path provision demo between two administrative domains.
Oudenaarde et al. Expires: September 2004 [Page 5]
Experimental RFC Prototype of a Generic AAA Server March 2004
In each administrative domain an AAA server (2 and 3) takes care of
the admission control of the network elements needed for the QoS
path. The network elements, Calient Optical Cross Connects (OXC),
were interconnected by two optical links (lambda 1 and 2). One
domain, called NetherLight, was situated at the Dutch optical
research facility. The other domain, called StarLight, was at the
USA Chicago-based counterpart. In fig. 3 the AAA server 1 acts as
a broker that tries to find the resources, i.e. the AAA servers 2
and 3 needed to setup the QoS path. The authorization decision is
a multi-domain decision. Both 'admission-AAAs' (2 and 3) will make
local decisions that are used in an overall authorization decision
by the 'broker-AAA' (1). All three AAA servers have in principle
their own Driving Policy. The Driving Policies applied by the
'admission-AAAs' refer for complex tasks, like configuration checks
on the state of the OXCs, to their own ASMs. These ASMs are hiding
the complexity of the tasked to be performed for the setup of the
QoS path. If a User's request is satisfied, a dedicated optical
path is provisioned, which could be used for large traffic between
the two domains.
+-----+ +-----+
| OXC |------------lambda 1 -------------| OXC |
| | | |
| |----------- lambda 2 ------------ | |
+-----+ +-----+
| |
| |
+-----+ +-----+
| AAA | | AAA |
| 2 | | 3 |
+-----+ +-----+
| |
\ /
\ +-----+ /
\----------------| AAA |-------------/
| 1 |
+-----+
|
() |
-()- ------/
/\
User
Fig. 3 Demo setup for QoS path provision.
4. Implementation details
4.1 AAA Requests in the Generic AAA Architecture
An AAA Request defines what can be asked of or provided to a
Generic AAA Server. For each kind of AAA Request data objects
Oudenaarde et al. Expires: September 2004 [Page 6]
Experimental RFC Prototype of a Generic AAA Server March 2004
should be defined with the information that can be incorporated
into a specific AAA Request. To accommodate all possible future
services by a limited number of predefined AAA Requests is
undoable. There is only a need to predefine AAA Requests for the
inter communication among AAA Servers, e.g. a request for remote
authorization or policy evaluation. Web services standards such as
SOAP, WSDL and UDDI will enable the creation of AAA Server specific
Requests and data objects contained, e.g. how construct an AAA
Request to order a pizza at a pizza AAA Server.
The WSDL (Web Services Description Language) is an XML-based
document that defines the inputs and outputs of a Web Service,
including the XML Schemas that should be used to create the input
and output documents. Using WSDL, AAA Request/Reply pairs might be
described for special Web Services. Fig 4 shows a logical view of
the Web services architecture. The Service Registry provides a
centralized location for storing service descriptions. An UDDI
registry is an example of this type of service registry.
+------------------+
=======>| Service Registry |<=======
|| +------------------+ ||
Find || || Publish
|| ||
\/ \/
+-------------------+ Bind +------------------+
| Service Requestor |<==========>| Service Provider |
+-------------------+ +------------------+
Fig. 4
In our setup the User sends its (XML) Request in the body of a SOAP
message over HTTP. A simple Request to asks for a QoS path the
'broker-AAA' accepts, might look like:
<AAA:AAARequest
xmlns:AAA="http://www.aaaarch.org/ns/AAA_BoD"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.aaaarch.org/ns/AAA_BoD
http://169.254.0.1/LambdaBoDRequest.xsd"
version="0.1" type="LambdaBoDCross" >
<Authentication>
<Signature>17520</Signature>
<User>Joe</User>
</Authentication>
<Authorization>
<CredentialID>7531</CredentialID>
</Authorization>
<BoDData>
<Source>
<Hostname>hp2</Hostname>
<OXCName>BeautyCees</OXCName>
Oudenaarde et al. Expires: September 2004 [Page 7]
Experimental RFC Prototype of a Generic AAA Server March 2004
<OXCDomain>NetherLight</OXCDomain>
<OXCPort>2</OXCPort>
</Source>
<Destination>
<Hostname>scyalla5</Hostname>
<OXCName>CHI</OXCName>
<OXCDomain>StarLight</OXCDomain>
<OXCPort>2</OXCPort>
</Destination>
<Bandwidth>1000</Bandwidth>
<StartTime>now</StartTime>
<Duration>20</Duration>
</BoDData>
</AAA:AAARequest>
The 'type' attribute of the first XML-tag, 'LambdaBoDCross'
indicates the kind of Request and is used by the Rule Base Engine
to retrieve the corresponding Driving Policy from the repository.
Also, this version of the policy is limited to two domains. A
typical policy would incorporate usage of a route discovery ASM.
4.2. Interface(s)
We use a servlet, a web-tier component, as a facade for making the
AAA functionality available to the outside world. There are a
couple of advantages for this approach. As the AAA functionality
is based on EJB-technology, both the Client tier and the EJB tier
implementation are independent. Clients may access EJB components
through a RMI-IIOP connection, but that excludes clients behind a
firewall. This fact also favors the choice for a servlet as a
single point of access, as firewalls are transparent for HTTP.
Additionally an EJB component has to expose its remote interface in
order to communicate with the outside world. This means that every
single call of the client on an EJB component initiates a remote
(RPC) call over the network. For each invocation the EJB Server
checks security, transactionality, etc. This might lay a heavy
load on the EJB Server in case several methods on several EJB
components need to be called by the client in order to get a
service done. All these problems are circumvent by a servlet as a
single point of entry using the local interface of a session bean
(EJB2.0). The session bean the servlet interfaces to is the RBE
that will contact those EJB components needed for the service
requested. Which EJB components are needed are described by a
Driving Policy.
Only some simple actions are performed by the servlet. It extracts
the Request from the body of the SOAP message and checks the schema
attributes. It are these attributes the parser of the RBE will
apply and they should be correct.
Oudenaarde et al. Expires: September 2004 [Page 8]
Experimental RFC Prototype of a Generic AAA Server March 2004
4.3 Driving Policy
In the policy language designed and applied, a Driving Policy is of
the form 'if( Condition ) then ( ActionList ) else ( ActionList )'.
For the grammar see Appendix A. An 'if-then-else' structure has a
Boolean truth-value, it is 'true' if its Condition is 'true', and
it is 'false' if its Condition is 'false'.
To facilitate the discussion we present a simple Driving Policy in
chunks (this is not supported by the grammar). A simple Driving
Policy for an AAA server that accepts the above Service request
looks like:
if( ASM::Authenticator.CheckSignature(
Request::Authentication.Signature,
Request::Authentication.User )
)
then( ACTION_LIST_1 )
else( Reply::Error.Message = "Authorization failed" )
The authentication is delegated to an ASM called Authenticator.
Two arguments from the incoming Request are passed to a member
function 'CheckSignature' of the authenticator. When the
authentication succeeds the action list ' ACTION_LIST_1' in the
then-part is executed, otherwise an error message is returned.
Action list 'ACTION_LIST_1' consists of two actions, a call to an
ASM and an if-then-else structure:
credential = ASM::Authorizor.CheckCredentials(
Request::Authorization.credentialID )
;
if( ASM::RM.CheckMultiDomain(
Request::BoDData.Source.OXCDomain,
Request::BoDData.Destination.OXCDomain )
)
then( ACTION_LIST_2_1 )
else( ACTION_LIST_2_2 )
The return state of the 'CheckCredentials' call is assigned to a
policy variable 'credential' for later use. Next an resource
manager (RM) is asked whether the connection requested is a
muti-domain connection or just a single domain set-up. In case
a multi-domain set-up is required action list 'ACTION_LIST_2_1'
is executed. We confined the discussion to the multi-domain
set-up. Action list ACTION_LIST_2_1 has the form:
lambda = ASM::RM.Connection(
Request::BoDData.Source.OXCDomain,
Request::BoDData.Destination.OXCDomain )
;
Oudenaarde et al. Expires: September 2004 [Page 9]
Experimental RFC Prototype of a Generic AAA Server March 2004
if( (lambda <= 0) )
then( Reply::Error.Message = "No connection available between
domains" )
else( ACTION_LIST_3 )
The connection between the two domains is a virtual lambda and
further actions are needed to resolve this virtual connection
[FGCS]. In action list 'ACTION_LIST_3' the requested connection is
provisioned:
r1 = ASM::AAABean.Cross( credential,
Request::BoDData.Source.OXCDomain,
lambda,
Request::BoDData.Source.OXCPort,
Request::BoDData.Bandwidth,
Request::BoDData.StartTime,
Request::BoDData.Duration )
;
if( (r1 <= 0) )
then( Reply::Error.Message = "failed to make cross-connect to
port in SRC domain" )
else( ACTION_LIST_4 )
Here the call 'Cross' results in an AAA Request to the AAA Server
of the source domain, in fig. 3 this is AAA Server 2.
Action list 'ACTION_LIST_4' is similar to 'ACTION_LIST_3':
r2 = ASM::AAABean.Cross( credential,
Request::BoDData.Destination.OXCDomain,
lambda,
Request::BoDData.Destination.OXCPort,
Request::BoDData.Bandwidth,
Request::BoDData.StartTime,
Request::BoDData.Duration )
;
etc.
We short cut the discussion with the remark that in case the call
to the destination AAA Server fails (AAA Server 3 in fig. 3) an
additional call to the source AAA Server has to be made to cancel
the provisioning.
For details about the implementation of Driving Policies as Java
objects see Appendix B.
4.4 ASM Framework
Application Specific Modules extend the J2EE environment to the
outside world. For example in our Bandwidth on Demand (BoD)
service an ASM monitors and controls the state of switches. This
is realized with the Java Connector Architecture (JCA). The JCA is
the bridge between J2EE and the Enterprise Information Systems.
Oudenaarde et al. Expires: September 2004 [Page 10]
Experimental RFC Prototype of a Generic AAA Server March 2004
JCA standard provides a mechanism to store and retrieve enterprise
data in J2EE. To make a decision in the RBE about a BoD service
the state of a switch needs to be checked. This is realized by a
connection oriented control adapter (JCA), which translates the
current state of the switch to an EJB entity bean in the J2EE
container. All information of the switch(es) are translated into
the entity bean, including the methods to control the switch.
4.5 Session
If an incoming Request is forwarded to the RBE, a Session Manager
(entity bean) is contacted by the RBE. The Session Manager starts
a session that will keep information about the Use Case of the AAA
Request. Each session is characterized by a sessionID, in our case
a primary key. The session information itself is persistent, as
the information must be recoverable after failure of the AAA
server. There are Use Cases for which the session information
should be kept in persistent storage for a certain time span after
the User received a Reply. In order to inform the RBE whether or
not it should ask for a Session persistent after the Reply is
returned, a special attribute in the Request tag might be defined.
In case the Session information should be kept for a longer time,
the Driving Policy has at least one Action to add the sessionID to
the Reply returned. This sessionID is needed to retrieve
information about or add information to the Session. For auditing
or accounting purposes full information of all equipment involved
should be available at the AAA server that received the Request.
This description of an AAA Session is far from complete and further
research is needed to complete it (see next section).
5. Conclusions and suggestions for further research
The Generic AAA architecture is best suited for policy based
decision taking at the business level involving high level service
abstractions and user definitions. The business level involves
decision taking based on simple policy rules and simple messages
exchanged. Due to the diversity in service operation methods, a
flexible way is needed to interface with various service entities
in different domains. The role assigned to Driving Policies in the
AAA concept and the relatively simple policy language suffice to
make the decision taking at the business level. Fine-grained
policy decisions should not be made at the level of Driving
Policies, but should be made by ASMs applying proprietary admission
control software. The policy language forces the developer to
off-load all semantic handling of attributes not important at the
business level to ASMs. This entails that multi-domain decision
taking is purely made on business logic. Further research is
needed to prove the correctness and usefulness of this approach.
Another issue to be settled by further research is performance.
To set-up a QoS path involves decision taking at different levels
Oudenaarde et al. Expires: September 2004 [Page 11]
Experimental RFC Prototype of a Generic AAA Server March 2004
and in different domains and might be a time consuming process.
One way to cope with long set-up times is parallelization. The
policy language should allow the use of concurrency operators. A
consequence of concurrent actions is the need to cancel actions in
process in case the failure of one action makes the outcome of
other ongoing, unfinished actions irrelevant.
Other questions we are interested in is how a dynamic trust-
relation with other parties can be established and how to combine
authorizations from different administrative domains applying pre-
established trust relationships. Authorizations based on monetary
units seem a promising approach.
Finally, some standardization of messages is required, especially
for those messages exchanged among AAA Servers, e.g. to retrieve a
policy from another AAA Server or error message including error
codes.
Appendix A
A grammar for Driving Policies. The notation of the grammar below
is in EBNF (Extended Backus Naur Formalism), terminal symbols are
placed between double quotes:
DrivingPolicy ::= "if" "(" Condition ")"
"then" "(" ActionList ")"
"else" "(" ActionList ")"
Condition ::= Bool
| Var
| {Var "="}? Procedure
| ComputedBoolean
| UnaryBooleanOperator Condition
| "(" Condition BinaryBooleanOperator
Condition ")"
UnaryBooleanOperator ::= "!"
BinaryBooleanOperator ::= "&&" | "||"
Procedure ::= ProcedureName "(" ARGList ")"
ARGList ::= {ARG {"," ARG}*}?
ARG ::= Bool | String | ComputedBoolean
| NonBooleanExpr
ComputedBoolean ::= "(" NonBooleanExp ComparisonOperator
NonBooleanExpr ")"
ComparisonOperator ::= "=="
| ">" | ">=" | "<" | "<=" | "!="
Oudenaarde et al. Expires: September 2004 [Page 12]
Experimental RFC Prototype of a Generic AAA Server March 2004
NonBooleanExpr ::= Int | Float | Var | Procedure
| UnaryArithmeticOperator NonBooleanExpr
| "(" NonBooleanExpr BinaryArithmeticOperator
NonBooleanExpr ")"
UnaryArithmeticOperator ::= "-"
BinaryArithmeticOperator ::= "+" | "-" | "/" | "*"
| "%" | "&" | "|"
ActionList ::= {Action {";" Action}*}?
Action ::= Var "=" Bool | Var "=" String
| Var "=" ComputedBoolean
| Var "=" NonBooleanExpr
| Procedure
| DrivingPolicy
Var ::= Source {"." Source}*
Source ::= Identifier
ProcedureName ::= Identifier "::" Identifier "." Identifier
Identifier ::= "[a-zA-Z_].[a-zA-Z0-9_]*"
String ::= "\"[^"\n]*\""
Int ::= "-?[0-9]+"
Float ::= "-?[0-9]+\.[0-9]*(E-?[0-9]+)?"
Bool ::= "(true|false)"
Evaluation of a Boolean expression is performed according to the
C-language convention. This makes an if-statement deterministic,
and as such there is no need to allow nesting of Driving Policies
in a Condition. Take for instance the following nested Driving
Policy:
if( A || Pol )
then( a0 ) else ( a1 )
with Pol: if( B ) then( b0 ) else ( b1 ).
Adopting the C convention this Driving Policy is equivalent to
if( A ) then( a0 )
else ( if( B ) then( b0 ; a0 ) else( b1 ; a1 ) )
Appendix B
A parser for the grammar in Appendix A is discussed by applying
Java Compiler Compiler (JavaCC). The semantic actions of the
parser yield a Driving Policy as a serialized object. Implementing
Driving Policies as a serialized objects, as discussed below,
simplifies the RBE to a 'RPN calculator-like' device.
This is accomplished by defining some simple classes that cover the
Oudenaarde et al. Expires: September 2004 [Page 13]
Experimental RFC Prototype of a Generic AAA Server March 2004
non-terminals of the grammar:
public class DrivingPolicy {
public Stack conditionStack;
public Stack thenStack;
public Stack elseStack;
}
public class Procedure extends Stack {
public String name = "";
}
public class Expression extends Stack {
public static final int COMP_BOOLEAN =0;
public static final int NON_BOOLEAN =1;
public int type = -1;
}
public class Literal {
public static final int BOOL =0;
public static final int INT =1;
public static final int FLOAT =2;
public static final int STRING =3;
public static final int VAR =4;
public int type = -1;
public String stringValue = "";
}
public class Operator {
public static final int NOT =0; // '!'
public static final int AND =1;
(...)
public static final int GET =6; // '>='
(...)
public static final int PLUS =9; // '+'
public static final int MINUS =10;
public static final int MUL =11; // '*'
(...)
public int type = -1;
}
public class Assignment {
public Object lval;
public Object rval;
}
The following example will illustrate how the parser produces a
Driving Policy object. Take for example the following Driving
Policy that checks whether some arithmetic manipulation of a
number 'Data' from a request is larger than the number 169:
Oudenaarde et al. Expires: September 2004 [Page 14]
Experimental RFC Prototype of a Generic AAA Server March 2004
if(
( ASM::Calculator.power(((2*3)+Request::Data),2) >= 169 )
)
then( Reply::Answer = "Yes" )
else( Reply::Answer = "No" )
The serialized JAVA object produced has three stacks that are
populated as follows:
conditionStack:
| - Procedure(ASM::Calculator.power):
| | - Expression(NON_BOOLEAN):
| | | - Literal(INT): "2"
| | | - Literal(INT): "3"
| | | - Operator(MUL)
| | | - Literal(VAR): "Request::Data"
| | | - Operator(PLUS)
| |
| | - Expression(NON_BOOLEAN):
| | - Literal(INT): "2"
|
| - Literal(INT): "169"
| - Operator(GET)
thenStack:
| - Assignment:
| - lval:
| | -Literal(VAR): Reply::Answer
|
| - rval:
| - Literal(STRING): "Yes"
elseStack:
| - Assignment:
| - lval:
| | -Literal(VAR): Reply::Answer
|
| - rval:
| - Literal(STRING): "No"
The 'conditionStack' contains three objects, a Procedure object, a
Literal object, and an Operator object. All objects are placed on
the 'conditionStack' adhering to Reverse Polish Notation (RPN).
This also holds for the stack of an Expression object. This
simplifies the RBE to a 'RPN calculator' like device in determining
the truth- value of the Condition. It just pops, resolves and
pushes objects from and onto the 'conditionStack' until the stack
contains a single Literal object of the type BOOL. Depending on
the 'stringValue', whether it is 'true' or 'false', the RBE
continues with the 'thenStack' or the 'elseStack' of the
Oudenaarde et al. Expires: September 2004 [Page 15]
Experimental RFC Prototype of a Generic AAA Server March 2004
DrivingPolicy object.
References
[FGCS] Leon Gommans, Cees de Laat, Bas van Oudenaarde, Arie Taal
"Authorization of a QoS path based on generic AAA" in
Future Generation Computer Systems, pp. 1009-1016.
Authors' Addresses
Bas van Oudenaarde
Faculty of Science, Informatics Institute,
University of Amsterdam
Kruislaan 403
1098 SJ Amsterdam
The Netherlands
Phone: +31 20 5257586
Fax: +31 20 5257490
Email: oudenaar@science.uva.nl
Leon Gommans
Faculty of Science, Informatics Institute,
University of Amsterdam
Kruislaan 403
1098 SJ Amsterdam
The Netherlands
Phone: +31 20 5257435
Fax: +31 20 5257490
Email: lgommans@science.uva.nl
Cees de Laat
Faculty of Science, Informatics Institute,
University of Amsterdam
Kruislaan 403
1098 SJ Amsterdam
The Netherlands
Phone: +31 20 5257590
Fax: +31 20 5257490
Email: delaat@science.uva.nl
Freek Dijkstra
Faculty of Science, Informatics Institute,
University of Amsterdam
Kruislaan 403
1098 SJ Amsterdam
The Netherlands
Oudenaarde et al. Expires: September 2004 [Page 16]
Experimental RFC Prototype of a Generic AAA Server March 2004
Phone: +31 20 5257531
Fax: +31 20 5257490
Email: fdijkstr@science.uva.nl
Arie Taal
Faculty of Science, Informatics Institute,
University of Amsterdam
Kruislaan 403
1098 SJ Amsterdam
The Netherlands
Phone: +31 20 5257586
Fax: +31 20 5257490
Email: taal@science.uva.nl
Oudenaarde et al. Expires: September 2004 [Page 17]