break
}
- update reply {
- Reply-Message += "Contains %{Foreach-Variable-0}"
+ &reply += {
+ Reply-Message = "Contains %{Foreach-Variable-0}"
}
}
----
[source,unlang]
----
caller dhcpv4 {
- update reply {
- &Filter-Id := &parent.request:Client-Identifier
+ &reply += {
+ &Filter-Id = &parent.request:Client-Identifier
}
}
----
[source,unlang]
----
if (&User-Name =~ /^(.*)@example\.com$/) {
- update reply {
- Reply-Message := "Hello %{1}"
+ &reply += {
+ Reply-Message = "Hello %{1}"
}
}
----
[source,unlang]
----
subrequest Disconnect-Request {
- update request {
- &User-Name := &parent.request.User-Name
- &NAS-IP-Address := &parent.request.NAS-IP-Address
- &NAS-Port := &parent.request.NAS-Port
- &Acct-Session-Id := &parent.request.Acct-Session-Id
- }
+ &User-Name := &parent.request.User-Name
+ &NAS-IP-Address := &parent.request.NAS-IP-Address
+ &NAS-Port := &parent.request.NAS-Port
+ &Acct-Session-Id := &parent.request.Acct-Session-Id
detach
radius
[source,unlang]
----
subrequest Disconnect-Request {
- update request {
- &User-Name := &parent.request.User-Name
- &NAS-IP-Address := &parent.request.NAS-IP-Address
- &NAS-Port := &parent.request.NAS-Port
- &Acct-Session-Id := &parent.request.Acct-Session-Id
- }
+ &User-Name := &parent.request.User-Name
+ &NAS-IP-Address := &parent.request.NAS-IP-Address
+ &NAS-Port := &parent.request.NAS-Port
+ &Acct-Session-Id := &parent.request.Acct-Session-Id
- update control {
- Request-Lifetime := 60
- }
+ &control.Request-Lifetime := 60
detach
radius
[source,unlang]
----
foreach &Class {
- update reply {
- Reply-Message += "Contains %{Foreach-Variable-0}"
+ &reply += {
+ Reply-Message = "Contains %{Foreach-Variable-0}"
}
}
----
[source,unlang]
----
foreach &TLV[*].Child-1 {
- update reply {
- Reply-Message += "TLV contains %{Foreach-Variable-0}"
+ &reply += {
+ Reply-Message = "TLV contains %{Foreach-Variable-0}"
}
}
----
----
sql
if (notfound) {
- update reply {
- Reply-Message = "We don't know who you are"
+ &reply += {
+ &Reply-Message = "We don't know who you are"
}
reject
}
[source,unlang]
----
if (!&User-Name) {
- update reply {
- Reply-Message := "We don't know who you are"
+ &reply += {
+ &Reply-Message = "We don't know who you are"
}
reject
}
Each module or subsection runs as a new child request, i.e. a
xref:unlang/subrequest.adoc[subrequest]. Each child request is an identical
copy of the parent request. Policies in the child can update the
-original parent by using `update parent.request`, or `update
-parent.reply`. Please see the xref:unlang/list.adoc[list] syntax for a
+original parent by referencing `&parent.request`, or
+`&parent.reply`. Please see the xref:unlang/list.adoc[list] syntax for a
more complete description of how to refer to parent requests.
The child requests are required because each subsection is run
radius1
if (fail) {
linelog1
- update parent.reply {
- &Reply-Message += "radius1 failed"
+ &parent.reply += {
+ &Reply-Message = "radius1 failed"
}
}
}
radius2
if (fail) {
linelog2
- update parent.reply {
- &Reply-Message += "radius2 failed"
+ &parent.reply += {
+ &Reply-Message = "radius2 failed"
}
}
}
The `parallel empty { ... }` syntax creates empty child requests.
These requests contain no attributes. Attributes in the child request
-must be added manually via an xref:unlang/update.adoc[update] statement.
+must be added manually via an xref:unlang/edit.adoc[edit] statement.
The `empty` keyword is most useful when it is necessary to manually
determine which attributes go into a child request.
----
parallel empty {
group {
- update request {
- &User-Name := "%{&parent.request.User-Name}@example.org"
- &User-Password := "hello"
+ &request := {
+ &User-Name = "%{&parent.request.User-Name}@example.org"
+ &User-Password = "hello"
}
radius1
}
group {
- update request {
- &User-Name := "%{&parent.request.User-Name}@example.com"
- &User-Password := &parent.request.User-Password
+ &request := {
+ &User-Name = "%{&parent.request.User-Name}@example.com"
+ &User-Password = &parent.request.User-Password
}
radius2
}
[source,unlang]
----
subrequest Disconnect-Request {
- update request {
- &User-Name := &parent.request.User-Name
- &NAS-IP-Address := &parent.request.NAS-IP-Address
- &NAS-Port := &parent.request.NAS-Port
- &Acct-Session-Id := &parent.request.Acct-Session-Id
- }
+ &User-Name := &parent.request.User-Name
+ &NAS-IP-Address := &parent.request.NAS-IP-Address
+ &NAS-Port := &parent.request.NAS-Port
+ &Acct-Session-Id := &parent.request.Acct-Session-Id
radius
}
[source,unlang]
----
subrequest dhcpv4.Discover {
- update request {
- &Your-IP-Address := &parent.request.Framed-IP-Address
- ...
- }
+ &Your-IP-Address := &parent.request.Framed-IP-Address
...
}
[source,unlang]
----
subrequest Disconnect-Request {
- update request {
- &User-Name := &parent.request.User-Name
- &NAS-IP-Address := &parent.request.NAS-IP-Address
- &NAS-Port := &parent.request.NAS-Port
- &Acct-Session-Id := &parent.request.Acct-Session-Id
- }
+ &User-Name := &parent.request.User-Name
+ &NAS-IP-Address := &parent.request.NAS-IP-Address
+ &NAS-Port := &parent.request.NAS-Port
+ &Acct-Session-Id := &parent.request.Acct-Session-Id
detach
radius