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.
- 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
aditional 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