6 #include <netinet/icmp6.h>
7 #include <boost/assign/list_of.hpp>
22 #include <services/services_types.h>
27 #define SET_ICMPV6_INTERFACE_STATS(it, list) \
28 InterfaceIcmpv6Stats entry; \
29 VmInterface *vmi = it->first; \
30 const Icmpv6Proto::Icmpv6Stats &stats = it->second; \
31 entry.set_interface_index(vmi->id()); \
32 entry.set_icmpv6_router_solicit(stats.icmpv6_router_solicit_); \
33 entry.set_icmpv6_router_advert(stats.icmpv6_router_advert_); \
34 entry.set_icmpv6_ping_request(stats.icmpv6_ping_request_); \
35 entry.set_icmpv6_ping_response(stats.icmpv6_ping_response_); \
36 entry.set_icmpv6_neighbor_solicit(stats.icmpv6_neighbor_solicit_); \
37 entry.set_icmpv6_neighbor_solicited(stats.icmpv6_neighbor_solicited_); \
38 entry.set_icmpv6_neighbor_advert_solicited \
39 (stats.icmpv6_neighbor_advert_solicited_); \
40 entry.set_icmpv6_neighbor_advert_unsolicited \
41 (stats.icmpv6_neighbor_advert_unsolicited_); \
42 list.push_back(entry);
45 boost::assign::map_list_of<uint16_t, std::string>
55 boost::assign::map_list_of<uint32_t, std::string>
71 boost::assign::map_list_of<uint32_t, std::string>
87 snprintf(mstr, 32,
"%02x:%02x:%02x:%02x:%02x:%02x",
88 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
93 std::ostringstream str;
99 std::ostringstream str;
100 str <<
"0x" << std::hex << val;
106 for (int32_t i = 0; i < len; i++) {
108 snprintf(val, 4,
"%02x ", pkt[i]);
122 std::map<uint32_t, std::string>::iterator it = g_dhcp_msg_types.find(msg_type);
123 if (it == g_dhcp_msg_types.end())
129 std::map<uint32_t, std::string>::iterator it = g_dhcpv6_msg_types.find(msg_type);
130 if (it == g_dhcpv6_msg_types.end())
136 PktStats *resp =
new PktStats();
138 uint32_t total_rcvd = 0;
139 uint32_t total_sent = 0;
142 total_sent += stats.
sent[i];
144 resp->set_total_rcvd(total_rcvd);
151 resp->set_dropped(stats.
dropped);
152 resp->set_total_sent(total_sent);
162 resp->set_context(ctxt);
163 resp->set_more(more);
168 DhcpStats *dhcp =
new DhcpStats();
171 dhcp->set_dhcp_discover(dstats.
discover);
172 dhcp->set_dhcp_request(dstats.
request);
173 dhcp->set_dhcp_inform(dstats.
inform);
174 dhcp->set_dhcp_decline(dstats.
decline);
175 dhcp->set_dhcp_other(dstats.
other);
176 dhcp->set_dhcp_errors(dstats.
errors);
177 dhcp->set_offers_sent(dstats.
offers);
178 dhcp->set_acks_sent(dstats.
acks);
179 dhcp->set_nacks_sent(dstats.
nacks);
180 dhcp->set_relay_request(dstats.
relay_req);
185 dhcp->set_context(ctxt);
186 dhcp->set_more(more);
191 Dhcpv6Stats *dhcp =
new Dhcpv6Stats();
194 dhcp->set_dhcp_solicit(dstats.
solicit);
195 dhcp->set_dhcp_advertise(dstats.
advertise);
196 dhcp->set_dhcp_request(dstats.
request);
197 dhcp->set_dhcp_confirm(dstats.
confirm);
198 dhcp->set_dhcp_renew(dstats.
renew);
199 dhcp->set_dhcp_rebind(dstats.
rebind);
200 dhcp->set_dhcp_reply(dstats.
reply);
201 dhcp->set_dhcp_release(dstats.
release);
202 dhcp->set_dhcp_decline(dstats.
decline);
205 dhcp->set_dhcp_error(dstats.
error);
206 dhcp->set_context(ctxt);
207 dhcp->set_more(more);
213 ArpStats *arp =
new ArpStats();
216 arp->set_arp_requests(astats.
arp_req);
219 arp->set_arp_resolved(astats.
resolved);
221 arp->set_arp_errors(astats.
errors);
226 arp->set_context(ctxt);
233 BfdStats *bfd =
new BfdStats();
241 std::vector<BfdSandeshSessions> &bfd_list =
242 const_cast<std::vector<BfdSandeshSessions>&
>(bfd->get_bfd_sessions());
245 BFD::Sessions::iterator it = sessions->begin();
246 while (it != sessions->end()) {
248 BfdSandeshSessions session;
255 std::ostringstream ss, rem_ss;
257 session.local_status = ss.str();
259 session.remote_status = rem_ss.str();
265 session.stats.receive_timer_expired_count =
267 session.stats.send_timer_expired_count =
270 bfd_list.push_back(session);
274 bfd->set_context(ctxt);
280 DnsStats *dns =
new DnsStats();
283 std::vector<string> &list =
284 const_cast<std::vector<string>&
>(dns->get_dns_resolver());
286 std::vector<string>dns_servers;
288 while (count < resolver_count) {
290 boost::is_any_of(
":"));
291 list.push_back(dns_servers[0]);
302 dns->set_dns_requests(nstats.
requests);
303 dns->set_dns_resolved(nstats.
resolved);
306 dns->set_dns_failures(nstats.
fail);
307 dns->set_dns_drops(nstats.
drop);
308 dns->set_context(ctxt);
314 IcmpStats *icmp =
new IcmpStats();
319 icmp->set_context(ctxt);
320 icmp->set_more(more);
325 Icmpv6Stats *icmp =
new Icmpv6Stats();
335 icmp->set_icmpv6_neighbor_advert_solicited
337 icmp->set_icmpv6_neighbor_advert_unsolicited
339 icmp->set_context(ctxt);
340 icmp->set_more(more);
345 IgmpStatsResponse *igmp =
new IgmpStatsResponse();
353 igmp->set_context(ctxt);
354 igmp->set_more(more);
361 resp.direction =
"in";
364 resp.direction =
"out";
367 resp.direction =
"error";
374 boost::array<std::string, MAX_AGENT_HDR_COMMANDS> commands =
375 { {
"switch",
"route",
"arp",
"l2-protocol",
"trap-nexthop",
376 "trap-resolve",
"trap-flow-miss",
"trap-l3-protocol",
377 "trap-diag",
"trap-ecmp-resolve",
"trap_source_mismatch",
378 "trap-dont-fragment",
"trap-zero-ttl",
"tor-control",
379 "trap-icmp-error",
"trap-flow-hold-action",
380 "trap-route-alert",
"trap-mac-learn",
"trap-mac-move" } };
381 uint8_t *ptr = pkt.
pkt;
385 uint16_t cmd = hdr->
cmd;
386 if (cmd < MAX_AGENT_HDR_COMMANDS)
387 resp.cmd = commands.at(cmd);
389 resp.cmd =
"unknown";
396 int len =
sizeof(
struct ether_header);
399 uint16_t
type = ntohs(eth->ether_type);
400 uint8_t *ptr = (uint8_t *)eth + 12;
401 while (type == ETHERTYPE_VLAN) {
404 type = ntohs(*(uint16_t *)ptr);
406 resp.type = (type == 0x800) ?
"ip" :
413 uint8_t data[
sizeof(uint32_t)];
416 memcpy(bytes.data, data,
sizeof(uint32_t));
417 return ntohl(bytes.addr);
421 uint16_t val = ntohs(arp->arp_hrd);
422 resp.htype = (val == 1) ?
"ethernet" :
IntToString(val);
423 val = ntohs(arp->arp_pro);
424 resp.protocol = (val == 0x800) ?
"ip" :
IntToString(val);
425 resp.hw_size = arp->arp_hln;
426 resp.prot_size = arp->arp_pln;
427 val = ntohs(arp->arp_op);
428 resp.opcode = (val == 1) ?
"request" :
434 resp.sender_ip = spa.to_string();
435 resp.target_ip = tpa.to_string();
439 resp.vers = ip->ip_v;
440 resp.hdrlen = ip->ip_hl;
441 resp.tos = ip->ip_tos;
442 resp.len = ntohs(ip->ip_len);
445 resp.ttl = ip->ip_ttl;
450 resp.src_ip = sa.to_string();
451 resp.dest_ip = da.to_string();
455 resp.flow = ntohl(ip->ip6_flow);
456 resp.plen = ntohs(ip->ip6_plen);
457 resp.next_hdr = ip->ip6_nxt;
458 resp.hlim = ip->ip6_hlim;
460 boost::system::error_code ec;
461 boost::asio::ip::address_v6::bytes_type src_addr;
462 memcpy(&src_addr[0], ip->ip6_src.s6_addr, 16);
463 boost::asio::ip::address_v6 src(src_addr);
464 resp.src_ip = src.to_string(ec);
466 boost::asio::ip::address_v6::bytes_type dest_addr;
467 memcpy(&dest_addr[0], ip->ip6_dst.s6_addr, 16);
468 boost::asio::ip::address_v6 dest(dest_addr);
469 resp.dest_ip = dest.to_string(ec);
473 resp.type = (icmp->icmp_type == ICMP_ECHO) ?
"echo request":
474 (icmp->icmp_type == ICMP_ECHOREPLY) ?
"echo reply" :
476 resp.code = icmp->icmp_code;
482 switch (icmp->icmp6_type) {
483 case ICMP6_ECHO_REQUEST:
484 resp.type =
"echo request";
487 case ICMP6_ECHO_REPLY:
488 resp.type =
"echo reply";
491 case ND_ROUTER_SOLICIT:
492 resp.type =
"router solicit";
495 case ND_ROUTER_ADVERT:
496 resp.type =
"router advertisement";
503 resp.code = icmp->icmp6_code;
509 resp.src_port = ntohs(udp->uh_sport);
510 resp.dest_port = ntohs(udp->uh_dport);
511 resp.length = ntohs(udp->uh_ulen);
519 str.assign(data, len);
520 return (msg + str +
"; ");
525 std::stringstream str;
526 str << msg << data <<
"; ";
533 return msg + addr.to_string() +
"; ";
539 std::stringstream routes;
542 while (parsed < len) {
547 for (j = 0; plen && j <= (plen - 1) / 8; ++j) {
548 addr = (addr << 8) | *ptr++;
551 addr = addr << (4 - j) * 8;
554 routes << prefix.to_string() <<
"/" << plen <<
" -> "
555 << route.to_string() <<
";";
559 resp += routes.str();
563 std::string &other, int32_t len) {
572 if (len >= (2 + opt->
len))
577 if (len >= (2 + opt->
len)) {
579 resp +=
"Requested IP : " + addr.to_string() +
"; ";
585 if (len >= (2 + opt->
len))
591 if (len >= (2 + opt->
len))
597 if (len >= (2 + opt->
len))
603 if (len >= (2 + opt->
len))
608 if (len >= (2 + opt->
len))
613 if (len >= (2 + opt->
len))
618 if (len >= (2 + opt->
len)) {
620 while (optlen < opt->len) {
629 if (len >= (2 + opt->
len))
634 if (len >= (2 + opt->
len))
639 if (len >= (2 + opt->
len))
644 if (len >= (2 + opt->
len)) {
645 resp +=
"Host Routes : ";
654 len -= (2 + opt->
len);
661 resp.op = (dhcp->
op == 1) ?
"request" :
"reply";
663 resp.hlen = dhcp->
hlen;
664 resp.hops = dhcp->
hops;
666 resp.secs = ntohs(dhcp->
secs);
673 resp.ciaddr = ciaddr.to_string();
674 resp.yiaddr = yiaddr.to_string();
675 resp.siaddr = siaddr.to_string();
676 resp.giaddr = giaddr.to_string();
683 resp.dhcp_options, resp.other_options, len);
694 if (dnslen < (int32_t)
sizeof(
dnshdr))
697 resp.xid = ntohs(dns->
xid);
699 resp.flags +=
"recursion desired; ";
701 resp.flags +=
"truncated; ";
703 resp.flags +=
"authoritative answer; ";
704 resp.flags += (!dns->
flags.
op) ?
"query; " :
708 resp.flags +=
"response; ";
710 resp.flags +=
"failure response : " +
713 resp.flags +=
"success response; ";
715 resp.flags +=
"request; ";
718 resp.flags +=
"checking disabled; ";
720 resp.flags +=
"answer authenticated; ";
722 resp.flags +=
"recursion available; ";
735 uint8_t *ptr = pkt.
pkt + hdr_len;
736 ptr +=
FillMacHdr((
struct ether_header *)ptr, data.mac_hdr);
738 std::vector<ArpPkt> &list =
739 const_cast<std::vector<ArpPkt>&
>(resp->get_pkt_list());
740 list.push_back(data);
747 uint8_t *ptr = pkt.
pkt + hdr_len;
748 ptr +=
FillMacHdr((
struct ether_header *)ptr, data.mac_hdr);
750 ptr += (data.ip_hdr.hdrlen * 4);
752 ptr +=
sizeof(udphdr);
755 int32_t remaining = std::min(pkt.
len, trace_size) -
756 (
sizeof(
struct ether_header) +
757 data.ip_hdr.hdrlen * 4 +
sizeof(udphdr));
759 std::vector<DhcpPkt> &list =
760 const_cast<std::vector<DhcpPkt>&
>(resp->get_pkt_list());
761 list.push_back(data);
768 uint8_t *ptr = pkt.
pkt + hdr_len;
769 ptr +=
FillMacHdr((
struct ether_header *)ptr, data.mac_hdr);
771 ptr +=
sizeof(ip6_hdr);
773 ptr +=
sizeof(udphdr);
776 int32_t remaining = std::min(pkt.
len, trace_size) -
777 (
sizeof(
struct ether_header) + sizeof(ip6_hdr) + sizeof(udphdr));
779 std::vector<Dhcpv6Pkt> &list =
780 const_cast<std::vector<Dhcpv6Pkt>&
>(resp->get_pkt_list());
781 list.push_back(data);
788 uint8_t *ptr = pkt.
pkt + hdr_len;
789 ptr +=
FillMacHdr((
struct ether_header *)ptr, data.mac_hdr);
791 ptr += (data.ip_hdr.hdrlen * 4);
793 ptr +=
sizeof(udphdr);
796 int32_t remaining = std::min(pkt.
len, trace_size) -
797 (
sizeof(
struct ether_header) +
798 data.ip_hdr.hdrlen * 4 +
sizeof(udphdr));
800 std::vector<DnsPkt> &list =
801 const_cast<std::vector<DnsPkt>&
>(resp->get_pkt_list());
802 list.push_back(data);
809 uint8_t *ptr = pkt.
pkt + hdr_len;
810 ptr +=
FillMacHdr((
struct ether_header *)ptr, data.mac_hdr);
812 ptr += (data.ip_hdr.hdrlen * 4);
814 std::vector<IcmpPkt> &list =
815 const_cast<std::vector<IcmpPkt>&
>(resp->get_pkt_list());
816 list.push_back(data);
823 uint8_t *ptr = pkt.
pkt + hdr_len;
824 ptr +=
FillMacHdr((
struct ether_header *)ptr, data.mac_hdr);
826 ptr +=
sizeof(ip6_hdr);
829 int32_t remaining = std::min(pkt.
len, trace_size) -
830 (
sizeof(
struct ether_header) + sizeof(ip6_hdr));
832 std::vector<Icmpv6Pkt> &list =
833 const_cast<std::vector<Icmpv6Pkt>&
>(resp->get_pkt_list());
834 list.push_back(data);
841 uint8_t *ptr = pkt.
pkt + hdr_len;
842 ptr +=
FillMacHdr((
struct ether_header *)ptr, data.mac_hdr);
845 int32_t remaining = std::min(pkt.
len, trace_size) -
sizeof(
struct ether_header);
847 std::vector<PktDump> &list =
848 const_cast<std::vector<PktDump>&
>(resp->get_pkt_list());
849 list.push_back(data);
853 std::string ctxt,
bool more =
false) {
855 boost::function<void(PktTrace::Pkt &)> cb;
856 boost::array<std::string, PktHandler::MAX_MODULES> names =
857 { {
"Invalid",
"Flow",
"Arp",
"Dhcp",
"Dhcpv6",
"Dns",
858 "Icmp",
"Icmpv6",
"Diagnostics",
"IcmpError",
"RxPacket",
863 resp =
new ArpPktSandesh();
865 static_cast<ArpPktSandesh *
>(resp)->set_type(names.at(mod));
867 static_cast<ArpPktSandesh *>(resp));
875 resp =
new DhcpPktSandesh();
877 static_cast<DhcpPktSandesh *
>(resp)->set_type(names.at(mod));
879 static_cast<DhcpPktSandesh *>(resp));
883 resp =
new Dhcpv6PktSandesh();
885 static_cast<Dhcpv6PktSandesh *
>(resp)->set_type(names.at(mod));
887 static_cast<Dhcpv6PktSandesh *>(resp));
891 resp =
new DnsPktSandesh();
893 static_cast<DnsPktSandesh *
>(resp)->set_type(names.at(mod));
895 static_cast<DnsPktSandesh *>(resp));
899 resp =
new IcmpPktSandesh();
901 static_cast<IcmpPktSandesh *
>(resp)->set_type(names.at(mod));
903 static_cast<IcmpPktSandesh *>(resp));
907 resp =
new Icmpv6PktSandesh();
909 static_cast<Icmpv6PktSandesh *
>(resp)->set_type(names.at(mod));
911 static_cast<Icmpv6PktSandesh *>(resp));
922 resp =
new PktSandesh();
923 static_cast<PktSandesh *
>(resp)->set_type(names.at(mod));
925 static_cast<PktSandesh *>(resp));
939 MetadataResponse *resp =
new MetadataResponse();
940 resp->set_metadata_server_port(
944 resp->set_metadata_requests(stats.
requests);
945 resp->set_metadata_responses(stats.
responses);
948 resp->set_context(ctxt);
949 resp->set_more(more);
955 void DhcpInfo::HandleRequest()
const {
960 void Dhcpv6Info::HandleRequest()
const {
965 void ArpInfo::HandleRequest()
const {
970 void BfdInfo::HandleRequest()
const {
975 void DnsInfo::HandleRequest()
const {
980 void IcmpInfo::HandleRequest()
const {
985 void Icmpv6Info::HandleRequest()
const {
990 void IgmpStatsReq::HandleRequest()
const {
995 void GmpStatsReq::HandleRequest()
const {
996 GmpStatsResponse *gmp =
new GmpStatsResponse();
1003 gmp->set_context(context());
1004 gmp->set_more(
false);
1008 static void SandeshError(
const std::string msg,
const std::string &context) {
1009 IgmpErrorResp *resp =
new IgmpErrorResp();
1010 resp->set_resp(msg);
1011 resp->set_context(context);
1012 resp->set_more(
false);
1016 void InterfaceIgmpStatsReq::HandleRequest()
const {
1017 std::string vn_uuid = get_vn_uuid();
1018 std::string gw = get_ipam_gateway();
1019 InterfaceIgmpStatsResponse *igmp =
new InterfaceIgmpStatsResponse();
1020 IgmpStats rx_badpacket_stats;
1021 IgmpStats rx_okpacket_stats;
1024 if (vn_uuid.empty() || gw.empty()) {
1025 SandeshError(
"Empty vn_uuid or gateway !!", context());
1036 boost::system::error_code ec;
1048 rx_badpacket_stats.undefined =
1050 rx_badpacket_stats.igmp_membership_query =
1052 rx_badpacket_stats.igmp_v1_membership_report =
1054 rx_badpacket_stats.igmp_proto_dvmrp =
1056 rx_badpacket_stats.igmp_proto_pim =
1058 rx_badpacket_stats.igmp_cisco_trace =
1060 rx_badpacket_stats.igmp_v2_membership_report =
1062 rx_badpacket_stats.igmp_group_leave =
1064 rx_badpacket_stats.igmp_mtrace_response =
1066 rx_badpacket_stats.igmp_mtrace_request =
1068 rx_badpacket_stats.igmp_dwr =
1070 rx_badpacket_stats.igmp_v3_membership_report =
1072 igmp->set_rx_badpacket_stats(rx_badpacket_stats);
1074 rx_okpacket_stats.undefined =
1076 rx_okpacket_stats.igmp_membership_query =
1078 rx_okpacket_stats.igmp_v1_membership_report =
1080 rx_okpacket_stats.igmp_proto_dvmrp =
1082 rx_okpacket_stats.igmp_proto_pim =
1084 rx_okpacket_stats.igmp_cisco_trace =
1086 rx_okpacket_stats.igmp_v2_membership_report =
1088 rx_okpacket_stats.igmp_group_leave =
1090 rx_okpacket_stats.igmp_mtrace_response =
1092 rx_okpacket_stats.igmp_mtrace_request =
1094 rx_okpacket_stats.igmp_dwr =
1096 rx_okpacket_stats.igmp_v3_membership_report =
1098 igmp->set_rx_okpacket_stats(rx_okpacket_stats);
1100 igmp->set_context(context());
1104 void MetadataInfo::HandleRequest()
const {
1109 void MacLearningInfo::HandleRequest()
const {
1114 void ShowAllInfo::HandleRequest()
const {
1128 void ClearAllInfo::HandleRequest()
const {
1150 PktErrorResp *resp =
new PktErrorResp();
1151 resp->set_context(context());
1155 void PktTraceInfo::HandleRequest()
const {
1156 uint32_t buffers = get_num_buffers();
1157 uint32_t flow_buffers = get_flow_num_buffers();
1158 PktTraceInfoResponse *resp =
new PktTraceInfoResponse();
1162 resp->set_resp(
"Invalid Input !!");
1173 resp->set_num_buffers(buffers);
1174 resp->set_flow_num_buffers(flow_buffers);
1175 resp->set_context(context());
1181 void ShowDnsEntries::HandleRequest()
const {
1182 AgentDnsEntries *resp =
new AgentDnsEntries();
1183 std::vector<VmDnsSandesh> dns_list;
1186 for (DnsProto::DnsUpdateSet::const_iterator it = dns_update_set.begin();
1187 it != dns_update_set.end(); ++it) {
1188 VmDnsSandesh vmdata;
1189 vmdata.vm = (*it)->itf->name();
1190 vmdata.is_floating = ((*it)->floatingIp ?
"yes" :
"no");
1191 if ((*it)->xmpp_data) {
1192 vmdata.virtual_dns = (*it)->xmpp_data->virtual_dns;
1193 vmdata.zone = (*it)->xmpp_data->zone;
1194 for (DnsItems::iterator item = (*it)->xmpp_data->items.begin();
1195 item != (*it)->xmpp_data->items.end(); ++item) {
1197 record.name = (*item).name;
1199 record.data = (*item).data;
1200 record.ttl = (*item).ttl;
1202 vmdata.records.push_back(record);
1205 dns_list.push_back(vmdata);
1207 resp->set_dns_list(dns_list);
1208 resp->set_context(context());
1212 void VmVdnsListReq::HandleRequest()
const {
1213 VmVdnsListResponse *resp =
new VmVdnsListResponse();
1214 resp->set_context(context());
1217 std::vector<VmVdnsListEntry> &list =
1218 const_cast<std::vector<VmVdnsListEntry>&
>(resp->get_rlist());
1219 DnsProto::VmDataMap::const_iterator it = vm_list.begin();
1220 while (it != vm_list.end()) {
1222 VmVdnsListEntry entry;
1223 entry.set_name(itf->
name());
1224 entry.set_vm_interface_index(itf->
id());
1225 list.push_back(entry);
1231 void VmVdnsDataReq::HandleRequest()
const {
1232 VmVdnsDataResponse *resp =
new VmVdnsDataResponse();
1233 resp->set_context(context());
1243 DnsProto::VmDataMap::const_iterator it = all_vms.find(vmi);
1244 if (it == all_vms.end()) {
1249 DnsProto::IpVdnsMap::const_iterator ip_it = ip_list.begin();
1250 std::vector<VmVdnsDataEntry> &list =
1251 const_cast<std::vector<VmVdnsDataEntry>&
>(resp->get_rlist());
1252 while (ip_it != ip_list.end()) {
1253 VmVdnsDataEntry entry;
1255 entry.set_ip(ip4.to_string());
1256 entry.set_vdns_name(ip_it->second);
1257 list.push_back(entry);
1263 void FipVdnsDataReq::HandleRequest()
const {
1264 FipVdnsDataResponse *resp =
new FipVdnsDataResponse();
1265 resp->set_context(context());
1268 std::vector<FipVdnsEntry> &list =
1269 const_cast<std::vector<FipVdnsEntry>&
>(resp->get_rlist());
1270 DnsProto::DnsFipSet::const_iterator it = fip_list.begin();
1271 while (it != fip_list.end()) {
1276 entry.set_ip(ip.to_string());
1279 list.push_back(entry);
1288 void ShowArpCache::HandleRequest()
const {
1289 ArpCacheResp *resp =
new ArpCacheResp();
1290 resp->set_context(context());
1294 for (ArpProto::ArpCache::const_iterator it = cache.begin();
1295 it != cache.end(); it++) {
1296 if (!arp_sandesh->
SetArpEntry(it->first, it->second))
1303 void ShowGratuitousArpCache::HandleRequest()
const {
1304 ArpCacheResp *resp =
new ArpCacheResp();
1305 resp->set_context(context());
1309 for (ArpProto::GratuitousArpCache::const_iterator it = cache.begin();
1310 it != cache.end(); it++) {
1311 for (ArpProto::ArpEntrySet::iterator sit = it->second.begin();
1312 sit != it->second.end(); sit++) {
1322 ArpCacheResp *vresp =
static_cast<ArpCacheResp *
>(
resp_);
1323 ArpSandeshData data;
1324 boost::asio::ip::address_v4 ip(key.
ip);
1325 data.set_ip(ip.to_string());
1329 std::string mac_str;
1331 data.set_mac(mac_str);
1332 switch (entry->
state()) {
1334 data.set_state(
"initing");
1337 data.set_state(
"resolving");
1340 data.set_state(
"active");
1343 data.set_state(
"re-resolving");
1347 std::vector<ArpSandeshData> &list =
1348 const_cast<std::vector<ArpSandeshData>&
>(vresp->get_arp_list());
1349 list.push_back(data);
1353 ArpCacheResp *resp =
new ArpCacheResp();
1364 ArpProto::InterfaceArpMap::const_iterator &it,
1365 std::vector<InterfaceArpStats> &list) {
1366 InterfaceArpStats data;
1367 data.set_interface_index(it->first);
1368 data.set_arp_requests(it->second.stats.arp_req);
1369 data.set_arp_replies(it->second.stats.arp_replies);
1370 data.set_arp_resolved(it->second.stats.resolved);
1371 list.push_back(data);
1374 void InterfaceArpStatsReq::HandleRequest()
const {
1375 InterfaceArpStatsResponse *resp =
new InterfaceArpStatsResponse();
1376 resp->set_context(context());
1380 std::vector<InterfaceArpStats> &list =
1381 const_cast<std::vector<InterfaceArpStats>&
>(resp->get_stats_list());
1382 if (get_interface_index() != -1) {
1383 ArpProto::InterfaceArpMap::const_iterator it = imap.find
1384 (get_interface_index());
1385 if (it != imap.end()) {
1391 for (ArpProto::InterfaceArpMap::const_iterator it = imap.begin();
1392 it != imap.end(); it++) {
1398 void InterfaceIcmpv6StatsReq::HandleRequest()
const {
1400 InterfaceIcmpv6StatsResponse *resp =
new InterfaceIcmpv6StatsResponse();
1401 resp->set_context(context());
1404 std::vector<InterfaceIcmpv6Stats> &list =
1405 const_cast<std::vector<InterfaceIcmpv6Stats>&
>(resp->get_stats_list());
1406 if (get_interface_index() != -1) {
1410 Icmpv6Proto::VmInterfaceMap::const_iterator it = imap.find(vm_intf);
1411 if (it != imap.end()) {
1416 for (Icmpv6Proto::VmInterfaceMap::const_iterator it = imap.begin();
1417 it != imap.end(); it++) {
uint32_t gmp_g_del_count_
std::map< uint16_t, std::string > g_ip_protocol_map
void HandleRequest(PktHandler::PktModuleName mod, std::string ctxt, bool more)
void Dhcpv6StatsSandesh(std::string ctxt, bool more)
std::map< VmInterface *, Icmpv6Stats > VmInterfaceMap
const BfdStats & GetStats() const
void IcmpStatsSandesh(std::string ctxt, bool more)
void FillArpHdr(ether_arp *arp, ArpHdr &resp)
ServicesModule * services() const
uint32_t arp_invalid_packets
#define DHCP_OPTION_MSG_TYPE
uint32_t icmpv6_ping_request_
static Agent * GetInstance()
static boost::uuids::uuid StringToUuid(const std::string &str)
uint32_t unknown_msg_drop
void FillPktData(PktTrace::Pkt &pkt, PktData &resp)
void FillIpv6Hdr(ip6_hdr *ip, Ipv6Hdr &resp)
uint8_t options[DHCP_MAX_OPTION_LEN]
#define DHCP_LEASE_UNASSIGNED
std::string IpProtocol(uint16_t prot)
void PktToHexString(uint8_t *pkt, int32_t len, std::string &msg)
MetadataProxy * metadataproxy()
const uint32_t id() const
#define DHCP_OPTION_IP_LEASE_TIME
uint32_t gmp_sg_add_count_
std::string IntToString(uint32_t val)
static std::string & Dhcpv6MsgType(uint32_t msg_type)
void FillIcmpv4Hdr(struct icmp *icmp, Icmpv4Hdr &resp)
std::vector< string > & GetDnslist()
uint32_t information_request
boost::asio::ip::address IpAddress
uint32_t icmpv6_neighbor_advert_solicited_
boost::asio::ip::address local_address
uint8_t sname[DHCP_NAME_LEN]
#define IGMP_V3_MEMBERSHIP_REPORT
#define DHCP_LEASE_ACTIVE
const DnsStats & GetStats() const
#define DHCP_OPTION_REQ_IP_ADDRESS
const DhcpStats & GetStats() const
uint32_t rx_okpacket[IGMP_MAX_TYPE]
const ArpCache & arp_cache()
void DhcpStatsSandesh(std::string ctxt, bool more)
InterfaceTable * interface_table() const
VnTable * vn_table() const
uint32_t icmpv6_neighbor_solicit_
#define DHCP_LEASE_UNKNOWN
const PktStats & GetStats() const
const string & GetName() const
void FillIcmpv6Hdr(icmp6_hdr *icmp, Icmpv6Hdr &resp, int32_t len)
void DhcpPktTrace(PktTrace::Pkt &pkt, DhcpPktSandesh *resp)
ArpProto * GetArpProto() const
uint8_t chaddr[DHCP_CHADDR_LEN]
const InterfaceArpMap & interface_arp_map()
const DnsFipSet & fip_list() const
std::map< ArpKey, ArpEntrySet > GratuitousArpCache
const IgmpStats & GetStats() const
void FillDhcpv4Options(Dhcpv4Options *opt, std::string &resp, std::string &other, int32_t len)
BFDRemoteSessionState remote_state() const
boost::asio::ip::address remote_address
const VmInterface * interface_
const GratuitousArpCache & gratuitous_arp_cache()
const Icmpv6Stats & GetStats() const
void OtherPktTrace(PktTrace::Pkt &pkt, PktSandesh *resp)
Dhcpv6Proto * dhcpv6_proto() const
std::map< uint32_t, InterfaceArpInfo > InterfaceArpMap
uint32_t PktTraceSize(PktModuleName mod) const
BfdProto * GetBfdProto() const
void PktTraceClear(PktModuleName mod)
static std::string & DhcpMsgType(uint32_t msg_type)
#define IGMP_V1_MEMBERSHIP_REPORT
uint32_t sent[MAX_MODULES]
std::map< uint32_t, std::string > g_dhcp_msg_types
std::set< DnsUpdateIpc *, UpdateCompare > DnsUpdateSet
uint32_t send_timer_expired_count
DhcpProto * GetDhcpProto() const
uint32_t icmpv6_router_advert_
void FillDnsHdr(dnshdr *dns, DnsHdr &resp, int32_t dnslen)
uint32_t max_retries_exceeded
std::string FillOptionInteger(uint32_t data, std::string msg)
#define DHCP_OPTION_SUBNET_MASK
IgmpProto * GetIgmpProto() const
uint32_t icmpv6_ping_response_
const ArpStats & GetStats() const
bool SetArpEntry(const ArpKey &key, const ArpEntry *entry)
uint32_t icmpv6_neighbor_advert_unsolicited_
std::string FillOptionIp(uint32_t data, std::string msg)
std::string context() const
#define SET_ICMPV6_INTERFACE_STATS(it, list)
static BindResolver * Resolver()
uint32_t ActiveSessions() const
virtual BFD::Server * GetServer() const
#define DHCPV6_OPTION_UNKNOWN
void PktTraceIterate(PktModuleName mod, PktTraceCallback cb)
PktHandler * pkt_handler() const
#define IGMP_MTRACE_REQUEST
uint32_t icmpv6_router_solicit_
std::map< uint32_t, std::string > g_dhcpv6_msg_types
void FillUdpHdr(udphdr *udp, UdpHdr &resp)
static const std::size_t kPktMaxNumBuffers
std::set< SessionKey > Sessions
uint32_t gmp_sg_del_count_
uint32_t gmp_g_add_count_
const Interface * get_interface() const
uint16_t FillVrouterHdr(PktTrace::Pkt &pkt, VrouterHdr &resp)
VnEntry * Find(const boost::uuids::uuid &vn_uuid)
#define DHCP_OPTION_HOST_NAME
const DhcpStats & GetStats() const
void PktStatsSandesh(std::string ctxt, bool more)
static uint16_t DnsClass(const std::string &cl)
#define DHCP_OPTION_BCAST_ADDRESS
boost::asio::ip::address_v4 Ip4Address
void PktTraceBuffers(PktModuleName mod, uint32_t buffers)
const IcmpStats & GetStats() const
const DnsUpdateSet & update_set() const
void Icmpv6StatsSandesh(std::string ctxt, bool more)
uint32_t arp_invalid_address
std::string FillOptionString(char *data, int32_t len, std::string msg)
BfdCommunicator & bfd_communicator()
#define IGMP_MTRACE_RESPONSE
std::string IntToHexString(uint32_t val)
void MetadataHandleRequest(std::string ctxt, bool more)
uint32_t rx_badpacket[IGMP_MAX_TYPE]
DnsProto * GetDnsProto() const
IcmpProto * GetIcmpProto() const
void set_context(std::string context)
static uint32_t get_val(void *data)
void Dhcpv6PktTrace(PktTrace::Pkt &pkt, Dhcpv6PktSandesh *resp)
uint32_t arp_invalid_interface
#define DHCP_OPTION_TIME_SERVER
int FillMacHdr(struct ether_header *eth, MacHdr &resp)
static const uint8_t entries_per_sandesh
uint32_t receive_timer_expired_count
uint64_t bfd_rx_ka_enqueue_count
void IcmpPktTrace(PktTrace::Pkt &pkt, IcmpPktSandesh *resp)
const VmDataMap & all_vms() const
BFDState local_state() const
const Interface * FindInterface(size_t index) const
Icmpv6Proto * icmpv6_proto() const
std::map< ArpKey, ArpEntry * > ArpCache
const VmInterfaceMap & vm_interfaces()
const std::string & name() const
void IgmpStatsSandesh(std::string ctxt, bool more)
void DnsStatsSandesh(std::string ctxt, bool more)
static uint16_t DnsType(const std::string &tp)
#define IGMP_V2_MEMBERSHIP_REPORT
uint32_t dhcp_disabled_drop
void FillHostRoutes(uint8_t *data, int len, std::string &resp)
const string & GetName() const
void SetInterfaceArpStatsEntry(ArpProto::InterfaceArpMap::const_iterator &it, std::vector< InterfaceArpStats > &list)
uint8_t pkt[kPktMaxTraceSize]
#define DHCP_OPTION_DOMAIN_NAME
uint32_t icmpv6_neighbor_solicited_
#define DHCPV6_RECONFIGURE
void BfdStatsSandesh(std::string ctxt, bool more)
void SandeshError(const std::string &msg, const std::string &context)
uint32_t bfd_rx_drop_count
const std::string to_string() const
#define DHCP_OPTION_SERVER_IDENTIFIER
uint32_t icmp_gw_ping_err
void Icmpv6PktTrace(PktTrace::Pkt &pkt, Icmpv6PktSandesh *resp)
std::map< uint32_t, std::string > IpVdnsMap
uint8_t file[DHCP_FILE_LEN]
const MacAddress & mac_address() const
#define DHCP_OPTION_CLASSLESS_ROUTE
void FillIpv4Hdr(struct ip *ip, Ipv4Hdr &resp)
static void MacToString(const unsigned char *mac, std::string &mac_str)
void ArpStatsSandesh(std::string ctxt, bool more)
std::map< const VmInterface *, IpVdnsMap > VmDataMap
void ArpPktTrace(PktTrace::Pkt &pkt, ArpPktSandesh *resp)
virtual void set_more(const bool val)=0
#define DHCP_OPTION_MESSAGE
uint32_t q_threshold_exceeded[MAX_MODULES]
void FillDhcpv4Hdr(dhcphdr *dhcp, Dhcpv4Hdr &resp, int32_t len)
#define DHCPV6_INFORMATION_REQUEST
const GmpStats & GetStats() const
std::size_t GetArpCacheSize()
std::set< DnsFipEntryPtr, DnsFipEntryCmp > DnsFipSet
void DnsPktTrace(PktTrace::Pkt &pkt, DnsPktSandesh *resp)
#define DHCP_OPTION_ROUTER
void FillDhcpv6Hdr(Dhcpv6Hdr *dhcp, Dhcpv6Header &resp, int32_t len)
#define IGMP_MEMBERSHIP_QUERY
uint32_t received[MAX_MODULES]