5 #include <boost/filesystem.hpp>
10 #include <sys/ioctl.h>
11 #include <sys/socket.h>
17 #include "sandesh/sandesh_trace.h"
18 #include "pkt/pkt_types.h"
22 using namespace boost::asio;
23 #define TAP_TRACE(obj, ...) \
25 Tap##obj::TraceMsg(PacketTraceBuf, __FILE__, __LINE__, __VA_ARGS__); \
38 sSocketDir =
"/tmp/" + guid + sSocketDir ;
39 sAgentSocketPath =
"/tmp/" + guid + sAgentSocketPath;
40 sVrouterSocketPath =
"/tmp/" + guid + sVrouterSocketPath;
46 boost::asio::io_context *io) :
47 name_(name), tap_fd_(-1), input_(*io), read_buff_(NULL), pkt_handler_(NULL) {
58 boost::system::error_code ec;
71 "Packet Tap Error <" + error.message() +
"> sending packet");
81 boost::asio::placeholders::error,
82 boost::asio::placeholders::bytes_transferred));
89 "Packet Tap Error <" + error.message() +
"> reading packet");
90 if (error == boost::system::errc::operation_canceled) {
111 std::vector<boost::asio::const_buffer> buff_list;
112 buff_list.push_back(boost::asio::buffer(buff, buff_len));
113 buff_list.push_back(boost::asio::buffer(pkt->data(), pkt->data_len()));
115 SendImpl(buff, buff_len, pkt, buff_list);
117 return buff_len + pkt->data_len();
121 boost::asio::io_context *io) :
130 boost::asio::io_context *io):
131 connected_(false), socket_(*io), timer_(NULL),
132 read_buff_(NULL), pkt_handler_(NULL), name_(name){
147 boost::filesystem::create_directories(
sSocketDir);
151 boost::system::error_code ec;
157 <<
": " << ec.message());
174 boost::system::error_code ec;
186 boost::asio::placeholders::error,
187 boost::asio::placeholders::bytes_transferred));
196 "UnixSocketConnectTimer"));
198 TAP_TRACE(Err,
"Starting connect to vrouter unix socket ");
206 boost::system::error_code ec;
209 TAP_TRACE(Err,
"Error connecting to vrouter unix socket " +
221 return (pkt->data_len());
224 std::vector<boost::asio::const_buffer> buff_list;
225 buff_list.push_back(boost::asio::buffer(buff, buff_len));
226 buff_list.push_back(boost::asio::buffer(pkt->data(), pkt->data_len()));
230 boost::asio::placeholders::error,
231 boost::asio::placeholders::bytes_transferred,
233 return (buff_len + pkt->data_len());
237 std::size_t length) {
240 "Packet Error <" + error.message() +
"> reading packet");
241 if (error == boost::system::errc::operation_canceled) {
263 if (error == boost::system::errc::not_connected) {
269 "Packet Error <" + error.message() +
"> sending packet");
boost::shared_ptr< PacketBuffer > PacketBufferPtr
Pkt0RawInterface(const std::string &name, boost::asio::io_context *io)
static string sVrouterSocketPath
virtual ~Pkt0RawInterface()
Pkt0Interface(const std::string &name, boost::asio::io_context *io)
void WriteHandler(const boost::system::error_code &error, std::size_t length, uint8_t *buff)
unsigned char mac_address_[ETHER_ADDR_LEN]
boost::asio::local::datagram_protocol::socket socket_
boost::asio::io_context * io_service()
virtual void IoShutdownControlInterface()
#define TAP_TRACE(obj,...)
PktHandler * pkt_handler() const
boost::scoped_ptr< Timer > timer_
static const uint32_t kConnectTimeout
virtual void IoShutdownControlInterface()
static void CreateMockAgent(const string &)
virtual void InitControlInterface()
virtual void InitControlInterface()
void ReadHandler(const boost::system::error_code &err, std::size_t length)
EventManager * event_manager() const
static Timer * CreateTimer(boost::asio::io_context &service, const std::string &name, int task_id=Timer::GetTimerTaskId(), int task_instance=Timer::GetTimerInstanceId(), bool delete_on_completion=false)
virtual void ShutdownControlInterface()
boost::asio::posix::stream_descriptor input_
PacketBufferManager * packet_buffer_manager() const
void ReadHandler(const boost::system::error_code &err, std::size_t length)
void WriteHandler(const boost::system::error_code &error, std::size_t length, PacketBufferPtr pkt, uint8_t *buff)
void SendImpl(uint8_t *buff, uint16_t buff_len, const PacketBufferPtr &pkt, buffer_list &buff_list)
PacketBufferPtr Allocate(uint32_t module, uint16_t len, uint32_t mdata)
bool Process(const PacketBufferPtr &pkt)
#define LOG(_Level, _Msg)
static string sAgentSocketPath
static const uint32_t kMaxPacketSize
int Send(uint8_t *buff, uint16_t buff_len, const PacketBufferPtr &pkt)
int Send(uint8_t *buff, uint16_t buff_len, const PacketBufferPtr &pkt)
Pkt0Socket(const std::string &name, boost::asio::io_context *io)
virtual void ShutdownControlInterface()