Due to a ransomware attack, the wiki was reverted to a July 2022 version. . We apologize for the lack of a more recent valid backup.
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
@Component(immediate = true)
@Service
public class IntentReactiveForwarding implements ForwardingMapService {
// ...<snip>...
private ApplicationId appId;
// Map for storing found endpoints, for our service. It is protected
// so that process() can access it.
protected final HashMap<HostId, HostId> endPoints = new HashMap<>();
// ...<snip>...
/**
* Packet processor responsible for forwarding packets along their paths.
*/
private class ReactivePacketProcessor implements PacketProcessor {
@Override
public void process(PacketContext context) {
// Stop processing if the packet has been handled, since we
// can't do any more to it.
if (context.isHandled()) {
return;
}
InboundPacket pkt = context.inPacket();
Ethernet ethPkt = pkt.parsed();
HostId srcId = HostId.hostId(ethPkt.getSourceMAC());
HostId dstId = HostId.hostId(ethPkt.getDestinationMAC());
// Do we know who this is for? If not, flood and bail.
Host dst = hostService.getHost(dstId);
if (dst == null) {
flood(context);
return;
}
// Add found endpoints to map.
endPoints.put(srcId, dstId);
// Otherwise forward and be done with it.
setUpConnectivity(context, srcId, dstId);
forwardPacketToDst(context, dst);
}
}
// ...<snip>...
@Override
public Map<HostId, HostId> getEndPoints() {
// Return our map as a read-only structure.
return Collections.unmodifiableMap(endPoints);
}
} |
...
Now, a module referencing the ForwardingMapService may call getEndPoints() to get a list of endpoints for which intents were installed, and traffic can flow between.
Next, we will create a CLI command to use this new service.
Creating a command