4 #ifndef vnsw_agent_pkt_vrouter_pkt_io_hpp
5 #define vnsw_agent_pkt_vrouter_pkt_io_hpp
19 (
sizeof(ether_header) +
sizeof(
struct agent_hdr));
63 MAX_AGENT_HDR_COMMANDS);
84 agent_hdr *vr_agent_hdr =
85 (agent_hdr *) (buff +
sizeof(ether_header));
87 hdr->
ifindex = ntohs(vr_agent_hdr->hdr_ifindex);
88 hdr->
vrf = ntohs(vr_agent_hdr->hdr_vrf);
90 hdr->
cmd_param = ntohl(vr_agent_hdr->hdr_cmd_param);
91 hdr->
nh = ntohl(vr_agent_hdr->hdr_cmd_param_1);
92 hdr->
cmd_param_2 = ntohl(vr_agent_hdr->hdr_cmd_param_2);
93 hdr->
cmd_param_3 = ntohl(vr_agent_hdr->hdr_cmd_param_3);
94 hdr->
cmd_param_4 = ntohl(vr_agent_hdr->hdr_cmd_param_4);
96 if (hdr->
cmd == AGENT_TRAP_HANDLE_DF) {
97 hdr->
mtu = ntohl(vr_agent_hdr->hdr_cmd_param);
98 hdr->
flow_index = ntohl(vr_agent_hdr->hdr_cmd_param_1);
108 int agent_hdr_len = 0;
110 agent_hdr_len =
DecodeAgentHdr(&hdr, pkt->data(), pkt->data_len());
111 if (agent_hdr_len <= 0) {
115 pkt->SetOffset(agent_hdr_len);
120 memset(buff, 0,
sizeof(agent_hdr));
123 struct ether_header *eth = (
struct ether_header *)buff;
124 eth->ether_shost[ETHER_ADDR_LEN - 1] = 1;
125 eth->ether_dhost[ETHER_ADDR_LEN - 1] = 2;
126 eth->ether_type = htons(ETHERTYPE_IP);
129 agent_hdr *vr_agent_hdr = (agent_hdr *) (eth + 1);
130 vr_agent_hdr->hdr_ifindex = htons(hdr.
ifindex);
131 vr_agent_hdr->hdr_vrf = htons(hdr.
vrf);
132 vr_agent_hdr->hdr_cmd = htons(hdr.
cmd);
133 vr_agent_hdr->hdr_cmd_param = htonl(hdr.
cmd_param);
134 vr_agent_hdr->hdr_cmd_param_1 = htonl(hdr.
cmd_param_1);
142 uint8_t *agent_hdr_buff =
new uint8_t [agent_hdr_len];
145 int ret =
Send(agent_hdr_buff, agent_hdr_len, pkt);
149 return ret -
sizeof(agent_hdr);
152 virtual int Send(uint8_t *buff, uint16_t buf_len,
184 #endif // vnsw_agent_pkt_vrouter_pkt_io_hpp
boost::shared_ptr< PacketBuffer > PacketBufferPtr
virtual ~VrouterControlInterface()
bool Process(const AgentHdr &hdr, const PacketBufferPtr &pkt)
virtual int Send(const AgentHdr &hdr, const PacketBufferPtr &pkt)
void incr_pkt_exceptions()
std::vector< AgentHdr::PktCommand > vr_cmd_list_
AgentStats * stats() const
void incr_pkt_invalid_agent_hdr()
PktHandler * pkt_handler() const
virtual void InitControlInterface()
VrouterControlInterface()
DISALLOW_COPY_AND_ASSIGN(VrouterControlInterface)
virtual uint32_t EncapsulationLength() const
static const uint32_t kAgentHdrLen
std::vector< AgentHdr::PktCommandParams > vr_cmd_params_list_
int EncodeAgentHdr(uint8_t *buff, const AgentHdr &hdr)
uint16_t AgentCmdToVrCmd(AgentHdr::PktCommand agent_cmd)
AgentHdr::PktCommandParams VrCmdParamtoAgentCmdParam(uint16_t param)
bool Process(const PacketBufferPtr &pkt)
std::vector< uint16_t > agent_cmd_list_
AgentHdr::PktCommand VrCmdToAgentCmd(uint16_t vr_cmd)
int DecodeAgentHdr(AgentHdr *hdr, uint8_t *buff, uint32_t len)