Lua examples
Important that accel-ppp was built with lua support cmake -DLUA=TRUE
or if system has more modern lua version, need this sets, for example cmake -DLUA=5.3
Example accel-ppp configuration:
[ipoe]
lua-file=/etc/accel-ppp.lua
username=lua:username_func
Create /etc/accel-ppp.lua and edit. Example for D-link switches with Option 82:
#!lua
function username_func(pkt)
v,b1,b2,b3,b4=string.unpack(pkt:agent_remote_id():sub(-4),'bbbb')
ip=b1..'.'..b2..'.'..b3..'.'..b4
v,port=string.unpack(string.sub(pkt:agent_circuit_id(),'-1'),'b')
local username=ip..'-'..port
-- print(username)
return username
end
Object pkt has next functions:
- hdr(name)
Will return value which contained in DHCP packet header.
name
may receive next params:xid
,ciaddr
,giaddr
,chaddr
.- ifname()
Will return interface name which received packet.
- ipaddr()
Will return client ip address exist in packet header.
- hwaddr()
Will return client MAC address.
- vlan()
Will return client VLAN.
local vlan = pkt:vlan()
local svid = bit.rshift(vlan,16)
local cvid = bit.band(vlan,0xffff)
- options()
Will return table which contains number of DHCP option in received packet.
- option(num)
Will return value with option number
num
.- agent_circuit_id()
Will return
agent_circuit_id
option 82.- agent_remote_id()
Will return
agent_remote_id
option 82.
Note:
All function return type string
, except for options()
Also to accel-ppp includes packet lpack for disassemble binary data.
It add to object string
additional function unpack(binary, fmt)
, where binary
is string which contain binary data, and fmt
is data format. To fmt
may be sets next data types:
z - zero terminated string
p - string precended by length byte
P - string precended by length word
f - float
d - double
c - int8_t
b - uint8_t
h - int16_t
H - uint16_t
i - int32_t
I - uint32_t
l - int64_t
L - uint64_t
< - little endian
> - big endian
= - native endian