Skip to content

Commit

Permalink
fw: remove makeControlResponse
Browse files Browse the repository at this point in the history
  • Loading branch information
pulsejet committed Jan 5, 2025
1 parent 4cb5f31 commit e3c0b91
Showing 10 changed files with 260 additions and 428 deletions.
27 changes: 8 additions & 19 deletions fw/face/internal-transport.go
Original file line number Diff line number Diff line change
@@ -15,7 +15,6 @@ import (
enc "github.com/named-data/ndnd/std/encoding"
spec_mgmt "github.com/named-data/ndnd/std/ndn/mgmt_2022"
spec "github.com/named-data/ndnd/std/ndn/spec_2022"
"github.com/named-data/ndnd/std/utils"
)

// InternalTransport is a transport for use by internal YaNFD modules (e.g., management).
@@ -79,19 +78,8 @@ func (t *InternalTransport) GetSendQueueSize() uint64 {
}

// Send sends a packet from the perspective of the internal component.
func (t *InternalTransport) Send(netWire enc.Wire, pitToken []byte, nextHopFaceID *uint64) {
lpPkt := &spec.LpPacket{
Fragment: netWire,
}
if len(pitToken) > 0 {
lpPkt.PitToken = append([]byte{}, pitToken...)
}
if nextHopFaceID != nil {
lpPkt.NextHopFaceId = utils.IdPtr(*nextHopFaceID)
}
pkt := &spec.Packet{
LpPacket: lpPkt,
}
func (t *InternalTransport) Send(lpPkt *spec.LpPacket) {
pkt := &spec.Packet{LpPacket: lpPkt}
encoder := spec.PacketEncoder{}
encoder.Init(pkt)
lpPacketWire := encoder.Encode(pkt)
@@ -103,7 +91,7 @@ func (t *InternalTransport) Send(netWire enc.Wire, pitToken []byte, nextHopFaceI
}

// Receive receives a packet from the perspective of the internal component.
func (t *InternalTransport) Receive() (enc.Wire, []byte, uint64) {
func (t *InternalTransport) Receive() *spec.LpPacket {
for frame := range t.recvQueue {
packet, _, err := spec.ReadPacket(enc.NewBufferReader(frame))
if err != nil {
@@ -112,15 +100,15 @@ func (t *InternalTransport) Receive() (enc.Wire, []byte, uint64) {
}

lpPkt := packet.LpPacket
if lpPkt.Fragment.Length() == 0 {
if packet.LpPacket == nil || lpPkt.Fragment.Length() == 0 {
core.LogWarn(t, "Received empty fragment - DROP")
continue
}

return lpPkt.Fragment, lpPkt.PitToken, *lpPkt.IncomingFaceId
return lpPkt
}

return nil, []byte{}, 0
return nil
}

func (t *InternalTransport) sendFrame(frame []byte) {
@@ -150,6 +138,7 @@ func (t *InternalTransport) runReceive() {

func (t *InternalTransport) Close() {
if t.running.Swap(false) {
// do not close the queues, let them be garbage collected
// do not close the send queue, let it be garbage collected
close(t.recvQueue)
}
}
38 changes: 13 additions & 25 deletions fw/mgmt/cs.go
Original file line number Diff line number Diff line change
@@ -14,14 +14,12 @@ import (
"github.com/named-data/ndnd/fw/table"
enc "github.com/named-data/ndnd/std/encoding"
mgmt "github.com/named-data/ndnd/std/ndn/mgmt_2022"
spec "github.com/named-data/ndnd/std/ndn/spec_2022"
"github.com/named-data/ndnd/std/utils"
)

// ContentStoreModule is the module that handles Content Store Management.
type ContentStoreModule struct {
manager *Thread
nextDatasetVersion uint64
manager *Thread
}

func (c *ContentStoreModule) String() string {
@@ -36,7 +34,7 @@ func (c *ContentStoreModule) getManager() *Thread {
return c.manager
}

func (c *ContentStoreModule) handleIncomingInterest(interest *spec.Interest, pitToken []byte, inFace uint64) {
func (c *ContentStoreModule) handleIncomingInterest(interest *Interest) {
// Only allow from /localhost
if !LOCAL_PREFIX.IsPrefix(interest.Name()) {
core.LogWarn(c, "Received CS management Interest from non-local source - DROP")
@@ -47,40 +45,36 @@ func (c *ContentStoreModule) handleIncomingInterest(interest *spec.Interest, pit
verb := interest.Name()[len(LOCAL_PREFIX)+1].String()
switch verb {
case "config":
c.config(interest, pitToken, inFace)
c.config(interest)
case "erase":
// TODO
//c.erase(interest, pitToken, inFace)
//c.erase(interest)
case "info":
c.info(interest, pitToken, inFace)
c.info(interest)
default:
core.LogWarn(c, "Received Interest for non-existent verb '", verb, "'")
response := makeControlResponse(501, "Unknown verb", nil)
c.manager.sendResponse(response, interest, pitToken, inFace)
c.manager.sendCtrlResp(interest, 501, "Unknown verb", nil)
return
}
}

func (c *ContentStoreModule) config(interest *spec.Interest, pitToken []byte, inFace uint64) {
func (c *ContentStoreModule) config(interest *Interest) {
if len(interest.Name()) < len(LOCAL_PREFIX)+3 {
// Name not long enough to contain ControlParameters
core.LogWarn(c, "Missing ControlParameters in ", interest.Name())
response := makeControlResponse(400, "ControlParameters is incorrect", nil)
c.manager.sendResponse(response, interest, pitToken, inFace)
c.manager.sendCtrlResp(interest, 400, "ControlParameters is incorrect", nil)
return
}

params := decodeControlParameters(c, interest)
if params == nil {
response := makeControlResponse(400, "ControlParameters is incorrect", nil)
c.manager.sendResponse(response, interest, pitToken, inFace)
c.manager.sendCtrlResp(interest, 400, "ControlParameters is incorrect", nil)
return
}

if (params.Flags == nil && params.Mask != nil) || (params.Flags != nil && params.Mask == nil) {
core.LogWarn(c, "Flags and Mask fields must either both be present or both be not present")
response := makeControlResponse(409, "ControlParameters are incorrect", nil)
c.manager.sendResponse(response, interest, pitToken, inFace)
c.manager.sendCtrlResp(interest, 409, "ControlParameters are incorrect", nil)
return
}

@@ -103,14 +97,13 @@ func (c *ContentStoreModule) config(interest *spec.Interest, pitToken []byte, in
}
}

response := makeControlResponse(200, "OK", &mgmt.ControlArgs{
c.manager.sendCtrlResp(interest, 200, "OK", &mgmt.ControlArgs{
Capacity: utils.IdPtr(uint64(table.CsCapacity())),
Flags: utils.IdPtr(c.getFlags()),
})
c.manager.sendResponse(response, interest, pitToken, inFace)
}

func (c *ContentStoreModule) info(interest *spec.Interest, pitToken []byte, _ uint64) {
func (c *ContentStoreModule) info(interest *Interest) {
if len(interest.Name()) > len(LOCAL_PREFIX)+2 {
// Ignore because contains version and/or segment components
return
@@ -133,12 +126,7 @@ func (c *ContentStoreModule) info(interest *spec.Interest, pitToken []byte, _ ui
enc.NewStringComponent(enc.TypeGenericNameComponent, "cs"),
enc.NewStringComponent(enc.TypeGenericNameComponent, "info"),
)
segments := makeStatusDataset(name, c.nextDatasetVersion, status.Encode())
c.manager.transport.Send(segments, pitToken, nil)

core.LogTrace(c, "Published forwarder status dataset version=", c.nextDatasetVersion,
", containing ", len(segments), " segments")
c.nextDatasetVersion++
c.manager.sendStatusDataset(interest, name, status.Encode())
}

func (c *ContentStoreModule) getFlags() uint64 {
Loading

0 comments on commit e3c0b91

Please # to comment.