Skip to content

Commit

Permalink
Added a queue for httpd.aaa call
Browse files Browse the repository at this point in the history
  • Loading branch information
fdurand committed Oct 22, 2024
1 parent 5cfdfc0 commit db6615b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
21 changes: 20 additions & 1 deletion go/cmd/pfacct/pfacct.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ import (
)

const DefaultTimeDuration = 5 * time.Minute
const DefaultRadiusWorkers = 5
const DefaultRadiusWorkers = 15
const DefaultRadiusWorkQueueSize = 1000
const DefaultHttpdWorkQueueSize = 1000
const DefaulHttpdWorkers = 100

type radiusRequest struct {
w radius.ResponseWriter
Expand Down Expand Up @@ -52,6 +54,7 @@ type PfAcct struct {
StatsdOption statsd.Option
StatsdClient *statsd.Client
radiusRequests []chan<- radiusRequest
httpdRequest chan *radius.Request
localSecret string
StatsdOnce tryableonce.TryableOnce
isProxied bool
Expand All @@ -60,6 +63,8 @@ type PfAcct struct {
ProcessBandwidthAcct bool
RadiusWorkers int
RadiusWorkQueueSize int
HttpdWorkQueueSize int
HttpdWorkers int
}

func NewPfAcct() *PfAcct {
Expand All @@ -84,6 +89,8 @@ func NewPfAcct() *PfAcct {
TimeDuration: DefaultTimeDuration,
RadiusWorkers: DefaultRadiusWorkers,
RadiusWorkQueueSize: DefaultRadiusWorkQueueSize,
HttpdWorkQueueSize: DefaultHttpdWorkQueueSize,
HttpdWorkers: DefaulHttpdWorkers,
}
pfAcct.SwitchInfoCache = cache.New(5*time.Minute, 10*time.Minute)
pfAcct.NodeSessionCache = cache.New(cache.NoExpiration, cache.NoExpiration)
Expand All @@ -93,8 +100,19 @@ func NewPfAcct() *PfAcct {

pfAcct.SetupConfig(ctx)
pfAcct.radiusRequests = makeRadiusRequests(pfAcct, pfAcct.RadiusWorkers, pfAcct.RadiusWorkQueueSize)
pfAcct.httpdRequest = make(chan *radius.Request, pfAcct.HttpdWorkQueueSize)
pfAcct.AAAClient = jsonrpc2.NewAAAClientFromConfig(ctx)
//pfAcct.Dispatcher = NewDispatcher(16, 128)

// create workers
for i := 1; i <= pfAcct.HttpdWorkers; i++ {
go func(i int) {
for j := range pfAcct.httpdRequest {
pfAcct.sendRadiusAccountingCall(j)
}
}(i)
}

pfAcct.runPing()
return pfAcct
}
Expand All @@ -108,6 +126,7 @@ func makeRadiusRequests(h *PfAcct, requestFanOut, backlog int) []chan<- radiusRe
for rr := range c {
h.handleAccountingRequest(rr)
}
fmt.Println(len(c))
}(c)
}

Expand Down
13 changes: 12 additions & 1 deletion go/cmd/pfacct/radius.go
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,18 @@ func (h *PfAcct) accountingUniqueSessionId(r *radius.Request) uint64 {
}

func (h *PfAcct) sendRadiusAccounting(r *radius.Request, switchInfo *SwitchInfo) {

h.sendRadiusAccountingToQueue(r)

}

func (h *PfAcct) sendRadiusAccountingToQueue(r *radius.Request) {
go func(h *PfAcct, r *radius.Request) {
h.httpdRequest <- r
}(h, r)
}

func (h *PfAcct) sendRadiusAccountingCall(r *radius.Request) {
ctx := r.Context()
attr := packetToMap(ctx, r.Packet)
attr["PF_HEADERS"] = map[string]string{
Expand All @@ -316,7 +328,6 @@ func (h *PfAcct) sendRadiusAccounting(r *radius.Request, switchInfo *SwitchInfo)
attr["NAS-IP-Address"] = strings.Split(r.RemoteAddr.String(), ":")[0]
logWarn(ctx, fmt.Sprintf("Empty NAS-IP-Address, using the source IP address of the packet (%s)", attr["NAS-IP-Address"]))
}

if _, err := h.AAAClient.Call(ctx, "radius_accounting", attr); err != nil {
logError(ctx, err.Error())
}
Expand Down

0 comments on commit db6615b

Please sign in to comment.