There are multiple abstraction levels on which you can add a covert channel:
The CovertChannel connects the inner network with the outer network. It forwards packets which are not important for the defined filter and can edit the filtered packets. To do that a CovertChannel consists of 4 sniffers that run in their own threads.
To implement your own channel you should derive from CovertChannel.
The CovertChannel constructor needs the interface name of the inner and outer network and pcap filter strings to set the filters for the sniffer. The sniffers will call the handle functions when receiving a packet.
When you derive CovertChannel you must implement:
The pdu parameter is the sniffed packet. This should be modified and send to the other (inner/outer) network.
So you can control your channel ChannelControls is an interface to provide basic control elements. CovertChannel derives from ChannelControls so you have to implement the virtual functions and methods of ChannelControls as well.
Bidirectional channels are explicit TCP channels. It implements the basic controls from ChannelControls and sets the filter string for TCP connecitons. So you can deriving from BidirectionalChannels and you must only implement: