Abstract:
A system and method for declarative network access control are provided. The system includes an interpreter, a rules engine, a storage device, and a processor. The interpreter transforms sentences in a declarative network access control language to rules. The rules engine evaluates the rules to produce actions for providing access control to a network at a point of access. The storage device stores instructions for the interpreter, the rules and the rules engine and the processor executes those instructions.

Description:
FIELD OF THE INVENTION 
     The current invention is related to network access control and declarative models, and in particular to a network access control language. 
     BACKGROUND 
     Developing conventional network access control software is a time consuming activity. Developers need to understand all of the types of rules that customers want to use to control access. These rules usually come in the form of, for example, “if user X logs in from location Y at time Z, then user X gets ABC network access policy.” Conventional network access control software is procedural code and when the code does not cover a particular use case (e.g., a user is already logged in to one part of the network and is attempting to log into another part of the network), then developers must modify, test, and release code implementing a new rule to cover the use case. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Embodiments according to the invention are illustrated by the following drawings. 
         FIG. 1  is a block diagram showing an exemplary system for using a network access control language according to an embodiment of the invention. 
         FIG. 2  is a block diagram showing an exemplary domain of the system of  FIG. 1 . 
     
    
    
     DETAILED DESCRIPTION OF THE EMBODIMENTS 
       FIG. 1  shows an exemplary system  100  for using a network access control language according to an embodiment of the invention. 
     Network access control may be used to enforce a set of security policies on any device seeking access to a network. Access may be controlled by only allowing compliant and/or trusted endpoint devices, such as, for example, personal computers (PCs), servers, laptops, cell phones, and personal digital assistants (PDAs) onto the network, thereby limiting the potential damage from security threats and risks, such as, for example, unauthorized access, viruses and worms. Network access control may be implemented as a rules-based method for preventing unauthorized access, providing security policy compliance, protecting infrastructure, securing managed and unmanaged assets, supporting internal environments and guest access, tailoring policies to specific risk levels, and/or providing other functionality. Network access control may be deployed in various infrastructures, including local area network (LAN), wide area network (WAN), wireless, remote access (e.g., virtual private network (VPN)), and other networks and systems and combinations thereof. 
     Exemplary embodiments solve the problem of developing, maintaining and extending conventional network access control software in a time-efficient fashion by using a declarative rather than a procedural programming approach. Conventional network access control software is usually implemented using a procedural model. The disadvantage of the conventional network access control software is that when a new type of rule is introduced in the form of “If user X logs in from location Y at a time Z then user X gets ABC network access policy,” the conventional code that performs the rule evaluation has to be modified so that it knows how to evaluate the new type of rule. Furthermore, maintaining the conventional code is not an easy task. Once a conventional procedural rule-evaluation system needs to evaluate more than one type of rule, the code becomes convoluted, prone to error, and difficult to maintain. 
     Exemplary embodiments use a declarative model rather than a procedural one for defining and evaluating rules. In this way, developers may simply tell the network access control software what to do without specifying how to do it. For example, rules may literally be in the form of “If user X logs in from location Y at time Z then user X gets ABC network access policy” or any other form. Using a declarative model for defining and evaluating rules implies that a rules engine will be used for evaluation in exemplary embodiments. Rules engines are written in a generic way; that is, rules engines are capable of evaluating any type of rule. 
     Exemplary embodiments have many advantages, including having a rules engine that only needs to be written once to accommodate any type of rule. Furthermore, existing rules engines may be leveraged for exemplary embodiments of network access control software, further reducing the overhead of developing, maintaining, and extending the software. When a new type of rule is introduced, the rule evaluation code does not change in exemplary embodiments. For example, if, in the initial release of conventional network access control software, all types of rules are known to be in the form of “If user X logs in from location Y at time Z, then user X gets ABC network access policy,” adding a new type of rule in the form of “If user X is already logged in then use X gets ABC network access policy” requires no change from the rule-evaluation perspective. This is because all rule evaluation is handled by a general purpose rules engine that knows how to evaluate any rule. Developers simply need to tell the rules engine which rules to evaluate (i.e., the declarative model). 
     Network access control may be implemented as software stored in at least one memory device coupled to a processor, such as, for example, a rule-based application. The software application, which is executed on the processor, has the general purpose of accepting input, finding all matching rules, execute the matching rules, and carrying out the consequence of the executed rules. 
     The exemplary system of  FIG. 1  includes a network access control language  104  that is a declarative language. A declarative language may be any relational language or functional language. A declarative programming language may describe relationships between variables in terms of functions or inference rules, and the language executor (interpreter or compiler) may apply some fixed algorithm to these relations to produce a result. A declarative language may be contrasted with an imperative language which specifies manipulation of the computer&#39;s internal state or a procedural language which specifies a sequence of steps to follow. 
     One example of an application implemented using a declarative language is a production system. A production system may include a collection of productions (i.e., rules), a working memory of facts and an algorithm for forward chaining that produces new facts from old. Rules may be declarative statements and may specify conditional actions or policies, such as if-then statements. The production system may include a rules engine to execute, analyze or run one or more rules based on input facts. The rules engine may conditionally execute one or more actions and/or one or more results (e.g., a new fact) may be returned. The application may be implemented, for example, as a production system may include application logic (e.g., network access control logic) and display logic. The application logic may include rules and other logic to execute in a rules engine. The application may be stored in at least one memory device coupled to at least one processor, which may, in turn, be coupled to a display device and an input/output device. In such an application, the rules engine may evaluate a rule without any code being modified. This improves development time over procedural code. 
     In  FIG. 1 , customers  102  may use the exemplary system  100  to create sentences from the network access control language  104 . These sentences may be submitted to the system network access control system  106 . The network access control system  106  includes an interpreter  108 , rules  110  stored on a storage device (not shown), a rules engine  112 , and a policy enforcement component  114 . The interpreter  108  may be any software that interprets the input sentences of the network access control language  104 , transforming them into rules in the form of if &lt;antecedent&gt; then &lt;consequence&gt;  110 . These output rules may be evaluated by the rules engine  112 , resulting in consequences that may be input to the policy enforcement component  114 . The policy enforcement component  114  may carry out the actions indicated in the consequences of the evaluated rules, which consequently may enforce the policies for the network access control system. 
     The exemplary system  100  may broadly address the access control of an entire network or multiple networks, each network including various access-controlled resources, such as servers, desktop computers, databases and other resources. Other embodiments may control access to a single server or parts of a network or networks. The exemplary system  100  may be used at the point of access. That is, when a client first attempts to connect to the network, the rules, which are generated by the interpreter  108  from the sentences in the network access control language  104 , may be evaluated and executed by the policy enforcement  114 . The exemplary system  100  includes a concept of identity by uniquely identifying clients and applying custom rule-sets to each client. The declarative network access control language may be used at the core of a network, that is, the point or points at which traffic passes through. 
       FIG. 2  shows an exemplary domain  200  of the system of  FIG. 1 . In a particular network access control domain  118 , there may be a common language across one or more domains. In security, an environment or context that is defined by security policies, security models, or security architecture to include a set of system resources and a set of system entities that have the right to access those resources may be called a domain. The domain may include, for example, network infrastructure devices, authentication servers, and management applications (not shown). 
     Table 1 below is an exemplary grammar for a declarative access control language. In computer science, a grammar may be a precise description of the syntax of a formal language used to generate a set of strings over some alphabet (e.g., ASCII symbols). In other words, a grammar may describe which of the possible sequences of symbols (strings) in a language constitute valid words, statements or sentences in that language. A compiler, interpreter, or some other software may be written to include a semantics of such sentences (i.e., what they mean). A grammar is usually regarded as a means to generate all the valid strings of a language; it may also be used as a basis for a recognizer that determines for any given string whether it is grammatical (i.e., belongs to the language). A grammar may also be used to analyze the strings of a language (i.e., to describe their internal structure). In computer science, this process is known as parsing and may be implemented in software known as a parser. 
     The exemplary grammar of table 1 may be used as a basis for generating a variety of compilers, interpreters, parsers, and other tools for implementing the declarative network access control language described by the grammar in various ways. Table 1 defines an exemplary embodiment of a grammar for a declarative network access control language, where:
     &lt;xxx&gt; represents variables that can be further expanded;   | is the logical OR operator;   &amp;&amp; is the logical AND operator;              are optional parameters;   + at least one symbol from an alphabet;   * is zero or more symbols from the alphabet;   := is the assignment operator;   Items without &lt; &gt; or           are constants and require no substitution;   ( ) are used to group items;   - is used to represent a range; and   { } is the occurrence count.   

     
       
         
               
             
               
             
           
               
                 TABLE 1 
               
               
                   
               
               
                 Exemplary Grammar 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                 &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action- 
               
               
                 list&gt; 
               
               
                 &lt;authenticates&gt; := &lt;successfully-authenticate&gt; | &lt;unsuccessfully-authenticate&gt; 
               
               
                 &lt;successfully-authenticate&gt; := received access-accept 
               
               
                 &lt;unsuccessfully-authenticate&gt; := received access-reject 
               
               
                 &lt;client-list&gt; := &lt;client&gt;+ | ALL-CLIENTS 
               
               
                 &lt;client&gt; := [wireless | wired] [compliant | non-compliant | unknown] &lt;user&gt; | 
               
               
                 &lt;machine&gt; | &lt;guest&gt; 
               
               
                 &lt;wireless&gt; := RADIUS attribute NAS-Port-Type in RADIUS access-request == 
               
               
                 Wireless Other(18) | RADIUS attribute NAS-Port-Type in RADIUS access- 
               
               
                 request == Wireless 802.11(19) 
               
               
                 &lt;wired&gt; := RADIUS attribute NAS-Port-Type in RADIUS access-request == 
               
               
                 Ethernet(15) 
               
               
                 &lt;compliant&gt; := RADIUS attribute HP-EI-Status in RADIUS access-accept == 
               
               
                 Pass 
               
               
                 &lt;non-compliant&gt; := RADIUS attribute HP-EI-Status in RADIUS access-accept 
               
               
                 == Fail 
               
               
                 &lt;unknown&gt; := RADIUS attribute HP-EI-Status in RADIUS access-accept == 
               
               
                 Unknown 
               
               
                 &lt;user&gt; := &lt;username&gt; | &lt;domain&gt;/&lt;username&gt; | &lt;username&gt;@&lt;domain&gt; 
               
               
                 &lt;username&gt; := * 
               
               
                 &lt;domain&gt; := (a-z,-,_)+ | (a-z,-,_)+(.a-z,-,_)* 
               
               
                 &lt;machine&gt; := host/&lt;username&gt; | ([0-9a-f]{2}([:-]|)){6} 
               
               
                 &lt;action-list&gt; := &lt;action&gt;* 
               
               
                 &lt;action&gt; := &lt;reject&gt; | &lt;classify-as-guest&gt; | &lt;classify-traffic classification&gt; | 
               
               
                 &lt;filter-traffic &lt;filter&gt;&gt; | &lt;route-traffic-to &lt;vlan-id&gt;&gt; | &lt;quarantine&gt; | &lt;allow-for- 
               
               
                 duration duration&gt; | &lt;filter-traffic-using &lt;filter&gt;&gt; 
               
               
                 &lt;reject&gt; := Issue Access-Reject RADIUS message to RADIUS client 
               
               
                 &lt;classify-as-guest&gt; := &lt;route-traffic-to guest-destination&gt; 
               
               
                 &lt;guest-destination&gt; := &lt;vlan-id&gt; 
               
               
                 &lt;vlan-id&gt; := VLAN [1-4094] 
               
               
                 &lt;classify-traffic &lt;traffic-classification&gt;&gt; := set the RADIUS attribute HP- 
               
               
                 bandwidth-max-ingress to classification &amp;&amp; set the RADIUS attribute HP- 
               
               
                 bandwidth-max-egress to classification. This attribute must only be set on a 
               
               
                 RADIUS access-accept. 
               
               
                 &lt;traffic-classification&gt; := 0-10,000,000 Kbps 
               
               
                 &lt;filter-traffic &lt;filter&gt;&gt; := set the RADIUS attribute HP-nas-filter-rule to &lt;filter&gt;. 
               
               
                 This attribute must only be set in a RADIUS access-accept. 
               
               
                 &lt;filter&gt; := (allow | deny) in &lt;protocol&gt; from any to &lt;ip-address&gt; cnt 
               
               
                 &lt;filter-name&gt; := + 
               
               
                 &lt;protocol&gt; := 0-255 
               
               
                 &lt;ip-address&gt; := (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0- 
               
               
                 9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0- 
               
               
                 9]?) \[1-32] 
               
               
                 &lt;route-traffic-to &lt;vlan-id&gt;&gt; := Set the following RADIUS attributes in the 
               
               
                 RADIUS access-accept packet, Tunnel-Type=VLAN, Tunnel-Medium=802, 
               
               
                 Tunnel-Private-Group-ID=&lt;vlan-id&gt; 
               
               
                 &lt;quarantine&gt; := &lt;route-traffic-to quarantine-destination&gt; 
               
               
                 &lt;quarantine-destination&gt; := &lt;vlan-id&gt; 
               
               
                 &lt;allow-for-duration &lt;duration&gt;&gt; := In the RADIUS access-accept message, set 
               
               
                 the RADIUS Session-Timeout = &lt;duration&gt; 
               
               
                 &lt;duration&gt; := 1 - 999,999,999,999 milliseconds 
               
               
                 &lt;condition-list&gt; := &lt;condition&gt;+ 
               
               
                 &lt;condition&gt; := &lt;attempted-to-login-from &lt;location&gt;&gt; | &lt;attempted-to-login- 
               
               
                 during &lt;time-period&gt;&gt; | attempted-to-login-using [&lt;wlan&gt; | &lt;machine&gt;]&gt; 
               
               
                 &lt;attempted-to-login-from &lt;location&gt;&gt; := In the RADIUS access-request 
               
               
                 message, the RADIUS attribute NAS-IP exists in &lt;location&gt; &amp;&amp; the RADIUS 
               
               
                 attribute NAS-Port exists in &lt;location&gt; 
               
               
                 &lt;location&gt; := &lt;ip-address&gt;+ | (&lt;ip-address&gt; &lt;port-list&gt;)+ 
               
               
                 &lt;port-list&gt; := [1-500]+ ,[1-500]* 
               
               
                 &lt;attempted-to-login-during &lt;time-period&gt;&gt; := The RADIUS access-request 
               
               
                 message was received within the bounds of &lt;time-period&gt; 
               
               
                 &lt;attempted-to-login-using [&lt;wlan&gt; | &lt;machine&gt;]&gt; := In the RADIUS access- 
               
               
                 request, the calling-station-ID RADIUS attribute == &lt;wlan&gt; | calling-station-ID 
               
               
                 == &lt;machine&gt; 
               
               
                 &lt;time-period&gt; := (start time in UTC, end time in UTC)+ 
               
               
                 &lt;wlan&gt; := ([0-9]|[a-f]|[-])* 
               
               
                   
               
             
          
         
       
     
     Table 2 below lists examples of sentences formed using the exemplary grammar of Table 1. The first example sentence in Table 2, “When John received access-accept and attempted-to-login-from 192.168.1.100 Issue Access-Reject RADIUS message to RADIUS client,” illustrates how the declarative network access control language  104  may be used to uniquely identify a client (e.g., the RADIUM client) and apply a custom rule for that client. The first sentence also illustrates how a specific location, (e.g., IP address 192.168.1.100) may be used in a sentence. In another embodiment of a grammar for the declarative network access control language, a location in a sentence formed using that grammar may be a point of access to the network or the core of the network. 
     
       
         
               
             
               
             
           
               
                 TABLE 2 
               
               
                   
               
               
                 Examples of Sentences 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                 When John received access-accept and attempted-to-login-from 
               
               
                 192.168.1.100 
               
               
                 Issue Access-Reject RADIUS message to RADIUS client 
               
               
                 When ALL-CLIENTS received access-reject and attempted-to-log-in-using 
               
               
                 GUEST-WLAN, classify-as-guest 
               
               
                 When Sarah received access-accept route-traffic-to VLAN 1 
               
               
                 When Tom received access-accept filter-traffic-using Marketing- 
               
               
                 department-filter 
               
               
                 When wired non-compliant user received access-reject quarantine 
               
               
                   
               
             
          
         
       
     
     The example sentences in Table 2 may be created by customers  102  using the declarative access control language  104 . These example sentences may be submitted to the interpreter  108  and transformed into rules. The generated rules may be evaluated by the rules engine  112  so that the resulting access control policies may be enforced by the policy enforcement component  114 . 
     The first example sentence in Table 2, “When John received access-accept and attempted-to-login-from 192.168.1.100 Issue Access-Reject RADIUS message to RADIUS client” is formed by making substitutions for the items enclosed in “&lt; &gt;” in the following sentence from Table 1: 
     &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action-list&gt;. 
     The first word “When” is in the sentence and no substitution is needed. 
     The second word “John” in the sentence indirectly substitutes John for &lt;client-list&gt; through a series of substitutions as follows. 
     First, 
     &lt;username&gt; := * 
     and * is defined as zero or more symbols, which here is the concatenation of “J”, “o”, “h”, and “n” so that John substitutes for &lt;username&gt; and &lt;username&gt; matches one of the alternative selections in 
                                 &lt;user&gt; := &lt;username&gt; | &lt;domain&gt;/&lt;username&gt; | &lt;username&gt;@&lt;domain&gt;.       Further substituting       &lt;user&gt; := &lt;username&gt;       and &lt;user&gt; for &lt;client&gt;, because &lt;user&gt; is one of the alternative selections in       &lt;client&gt; := [wireless | wired] [compliant | non-compliant | unknown] &lt;user&gt; |       &lt;machine&gt; | &lt;guest&gt;       and because &lt;client&gt; is one of the alternative selections in       &lt;client-list&gt; := &lt;client&gt;+ | ALL-CLIENTS,       yields the series of substitutions &lt;client-list&gt; = &lt;client&gt; = &lt;user&gt; =&lt;username&gt;       = John so that John may be substituted for &lt;client-list&gt; in       &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action-       list&gt;,                    
thus forming the first two words “When John” of the first example sentence.
 
     The next phrase of the first example sentence, “received access-accept,” comes from the selection of successfully-authenticate among the alternatives in &lt;authenticates&gt; := &lt;successfully-authenticate&gt; | &lt;unsuccessfully-authenticate&gt; and the substitution of &lt;successfully-authenticate&gt; := received access-accept, thus forming the initial portion “When John received access-accept” of the first example sentence. 
     The next word of the first example sentence is “and” is simply in the &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action-list&gt; so that no substitution is needed. 
     The next phrase “attempted-to-login-from 192.168.1.100” is formed by selecting &lt;attempted-to-login from &lt;location&gt;&gt; from the alternatives in &lt;condition&gt; := &lt;attempted-to-login-from &lt;location&gt;&gt; | &lt;attempted-to-login-during &lt;time-period&gt;&gt; | attempted-to-login-using [&lt;wlan&gt; | &lt;machine&gt;]&gt; and by substituting &lt;condition&gt; for &lt;condition-list&gt; because &lt;condition-list&gt; := &lt;condition&gt;+ 
     and selecting &lt;ip-address&gt;+ with only one occurrence of &lt;ip-adress&gt; in &lt;location&gt; := &lt;ip-address&gt;+ | (&lt;ip-address&gt; &lt;port-list&gt;)+, 
     where 192.168.1.100 is an ip-address formed by matching symbols to &lt;ip-address&gt; := (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) \.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) \.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\[1-32], 
     resulting in “When John received access-accept and attempted-to-login-from 192.168.1.100”, which has all but the last phrase in the first example sentence. 
     The last phrase “Issue Access-Reject RADIUS message to RADIUS client” substitutes reject for &lt;action-list&gt; because a single action is selected from 
     &lt;action-list&gt; := &lt;action&gt; * 
     and &lt;reject&gt; is selected from the alternatives in 
     &lt;action&gt; := &lt;reject&gt; | &lt;classify-as-guest&gt; | &lt;classify-traffic classification&gt; | &lt;filter-traffic &lt;filter&gt;&gt; | &lt;route-traffic-to &lt;vlan-id&gt;&gt; | &lt;quarantine&gt; | &lt;allow-for-duration duration&gt; | &lt;filter-traffic-using &lt;filter&gt;&gt;. 
     Substituting 
     &lt;reject&gt; := Issue Access-Reject RADIUS message to RADIUS client, 
     results in the whole first example sentence “When John received access-accept and attempted-to-login-from 192.168.1.100 Issue Access-Reject RADIUS message to RADIUS client.” 
     The second example sentence in Table 2, “When ALL-CLIENTS received access-reject and attempted-to-log-in-using GUEST-WLAN, classify-as-guest” is formed in a similar manner using substitution and matching with the following expressions in the grammar of Table 1. 
     
       
         
               
             
           
               
                   
               
             
             
               
                 &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action- 
               
               
                 list&gt; 
               
               
                 &lt;client-list&gt; := &lt;client&gt;+ | ALL-CLIENTS 
               
               
                 &lt;client&gt; := [wireless | wired] [compliant | non-compliant | unknown] &lt;user&gt; | 
               
               
                 &lt;machine&gt; | &lt;guest&gt; 
               
               
                 &lt;authenticates&gt; := &lt;successfully-authenticate&gt; | &lt;unsuccessfully-authenticate&gt; 
               
               
                 &lt;unsuccessfully-authenticate&gt; := received access-reject 
               
               
                 &lt;condition-list&gt; := &lt;condition&gt;+ 
               
               
                 &lt;condition&gt; := &lt;attempted-to-login-from &lt;location&gt;&gt; | &lt;attempted-to-login- 
               
               
                 during &lt;time-period&gt;&gt; | attempted-to-login-using [&lt;wlan&gt; | &lt;machine&gt;]&gt; 
               
               
                 &lt;attempted-to-login-from &lt;location&gt;&gt; := In the RADIUS access-request 
               
               
                 message, the RADIUS attribute NAS-IP exists in &lt;location&gt; &amp;&amp; the RADIUS 
               
               
                 attribute NAS-Port exists in &lt;location&gt; 
               
               
                 &lt;attempted-to-login-using [&lt;wlan&gt; | &lt;machine&gt;]&gt; := In the RADIUS access- 
               
               
                 request, the calling-station-ID RADIUS attribute == &lt;wlan&gt; | calling-station-ID 
               
               
                 == &lt;machine&gt; 
               
               
                 &lt;wlan&gt; := ([0-9]|[a-f]|[-])* 
               
               
                 &lt;machine&gt; := host/&lt;username&gt; | ([0-9a-f]{2}([:-]|)){6} 
               
               
                 &lt;action-list&gt; := &lt;action&gt;* 
               
               
                 &lt;action&gt; := &lt;reject&gt; | &lt;classify-as-guest&gt; | &lt;classify-traffic classification&gt; | 
               
               
                 &lt;filter-traffic &lt;filter&gt;&gt; | &lt;route-traffic-to &lt;vlan-id&gt;&gt; | &lt;quarantine&gt; | &lt;allow-for- 
               
               
                 duration duration&gt; | &lt;filter-traffic-using &lt;filter&gt;&gt; 
               
               
                   
               
             
          
         
       
     
     The third example sentence in Table 2, “When Sarah received access-accept route-traffic-to VLAN 1” is formed in a similar manner using substitution and matching for the following expressions in the grammar of Table 1. 
     
       
         
               
             
           
               
                   
               
             
             
               
                 &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action- 
               
               
                 list&gt; 
               
               
                 &lt;client-list&gt; := &lt;client&gt;+ | ALL-CLIENTS 
               
               
                 &lt;client&gt; := [wireless | wired] [compliant | non-compliant | unknown] &lt;user&gt; | 
               
               
                 &lt;machine&gt; | &lt;guest&gt; 
               
               
                 &lt;username&gt; := * 
               
               
                 &lt;authenticates&gt; := &lt;successfully-authenticate&gt; | &lt;unsuccessfully-authenticate&gt; 
               
               
                 &lt;successfully-authenticate&gt; := received access-accept 
               
               
                 &lt;action-list&gt; := &lt;action&gt;* 
               
               
                 &lt;action&gt; := &lt;reject&gt; | &lt;classify-as-guest&gt; | &lt;classify-traffic classification&gt; | 
               
               
                 &lt;filter-traffic &lt;filter&gt;&gt; | &lt;route-traffic-to &lt;vlan-id&gt;&gt; | &lt;quarantine&gt; | &lt;allow-for- 
               
               
                 duration duration&gt; | &lt;filter-traffic-using &lt;filter&gt;&gt; 
               
               
                 &lt;vlan-id&gt; := VLAN [1-4094] 
               
               
                   
               
             
          
         
       
     
     The fourth example sentence in Table 2, “When Tom received access-accept filter-traffic-using Marketing-department-filter” is formed in a similar manner using substitution and matching for the following expressions in the grammar of Table 1. 
     
       
         
               
             
           
               
                   
               
             
             
               
                 &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action- 
               
               
                 list&gt; 
               
               
                 &lt;client-list&gt; := &lt;client&gt;+ | ALL-CLIENTS 
               
               
                 &lt;client&gt; := [wireless | wired] [compliant | non-compliant | unknown] &lt;user&gt; | 
               
               
                 &lt;machine&gt; | &lt;guest&gt; 
               
               
                 &lt;username&gt; := * 
               
               
                 &lt;authenticates&gt; := &lt;successfully-authenticate&gt; | &lt;unsuccessfully-authenticate&gt; 
               
               
                 &lt;successfully-authenticate&gt; := received access-accept 
               
               
                 &lt;action-list&gt; := &lt;action&gt;* 
               
               
                 &lt;action&gt; := &lt;reject&gt; | &lt;classify-as-guest&gt; | &lt;classify-traffic classification&gt; | 
               
               
                 &lt;filter-traffic &lt;filter&gt;&gt; | &lt;route-traffic-to &lt;vlan-id&gt;&gt; | &lt;quarantine&gt; | &lt;allow-for- 
               
               
                 duration duration&gt; | &lt;filter-traffic-using &lt;filter-name&gt;&gt; 
               
               
                 &lt;filter-name&gt; := + 
               
               
                   
               
             
          
         
       
     
     The fifth and last example sentence, “When wired non-compliant user received access-reject quarantine” is formed in a similar manner using substitution and matching for the following expressions in the grammar of Table 1. 
     
       
         
               
             
           
               
                   
               
             
             
               
                 &lt;sentence&gt; := When &lt;client-list&gt; &lt;authenticates&gt; [and &lt;condition-list&gt;] &lt;action- 
               
               
                 list&gt; 
               
               
                 &lt;client-list&gt; := &lt;client&gt;+ | ALL-CLIENTS 
               
               
                 &lt;client&gt; := [wireless | wired] [compliant | non-compliant | unknown] &lt;user&gt; | 
               
               
                 &lt;machine&gt; | &lt;guest&gt; 
               
               
                 &lt;authenticates&gt; := &lt;successfully-authenticate&gt; | &lt;unsuccessfully-authenticate&gt; 
               
               
                 &lt;successfully-authenticate&gt; := received access-accept 
               
               
                 &lt;unsuccessfully-authenticate&gt; := received access-reject 
               
               
                 &lt;action-list&gt; := &lt;action&gt;* 
               
               
                 &lt;action&gt; := &lt;reject&gt; | &lt;classify-as-guest&gt; | &lt;classify-traffic classification&gt; | 
               
               
                 &lt;filter-traffic &lt;filter&gt;&gt; | &lt;route-traffic-to &lt;vlan-id&gt;&gt; | &lt;quarantine&gt; | &lt;allow-for- 
               
               
                 duration duration&gt; | &lt;filter-traffic-using &lt;filter&gt;&gt; 
               
               
                   
               
             
          
         
       
     
     The example sentences in Table 2 may be transformed by the interpreter  108  to rules in the form of, for example, if &lt;antecedent&gt;→&lt;consequence&gt;  110 , which may then be evaluated by the rules engine  112  and implemented by the policy enforcement component  114 , as illustrated in  FIG. 1 . The first sentence, “When John received access-accept and attempted-to-login-from 192.168.1.100 Issue Access-Reject RADIUS message to RADIUS client,” may be transformed into a rule that may be evaluated by the rules engine  112 , resulting in consequences or actions that may be carried out by the policy enforcement component  114  to deny access to John when he attempts to login from a particular location and to display a message indicating that access was denied. The second sentence, “When ALL-CLIENTS received access-reject and attempted-to-log-in-using GUEST-WLAN, classify-as-guest” may deny access to guests who are not authenticated when they attempt to login to a particular machine. The third sentence, “When Sarah received access-accept route-traffic-to VLAN 1” may provide access to Sarah and route traffic to a particular network. The fourth sentence, “When Tom received access-accept filter-traffic-using Marketing-department-filter” may permit access to Tom with a specific filter related to the marketing department, which may be the department in which Tom works. The fifth sentence, “When wired non-compliant user received access-reject quarantine” may quarantine a non-compliant user who was not authenticated. These example sentences illustrate merely a few possible rules and policies that may be used in a network access control system, but many other varied sentences may also be generated by various other grammars for a declarative network access control language according to various embodiments and processed by various other interpreters, rules engines, and policy enforcement and/or other components in various network access control systems.