From b05e5c7686177b1a61e5204da0cd92a7b068f90d Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Wed, 6 May 2020 15:01:14 -0700 Subject: [PATCH] Migrate IP.cc to use IntrusivePtr --- src/IP.cc | 63 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/src/IP.cc b/src/IP.cc index 820570a2d6..590f932a90 100644 --- a/src/IP.cc +++ b/src/IP.cc @@ -42,14 +42,14 @@ static inline RecordType* hdrType(RecordType*& type, const char* name) return type; } -static VectorVal* BuildOptionsVal(const u_char* data, int len) +static IntrusivePtr BuildOptionsVal(const u_char* data, int len) { - VectorVal* vv = new VectorVal(internal_type("ip6_options")->AsVectorType()); + auto vv = make_intrusive(internal_type("ip6_options")->AsVectorType()); while ( len > 0 ) { const struct ip6_opt* opt = (const struct ip6_opt*) data; - RecordVal* rv = new RecordVal(hdrType(ip6_option_type, "ip6_option")); + auto rv = make_intrusive(hdrType(ip6_option_type, "ip6_option")); rv->Assign(0, val_mgr->Count(opt->ip6o_type)); if ( opt->ip6o_type == 0 ) @@ -71,7 +71,7 @@ static VectorVal* BuildOptionsVal(const u_char* data, int len) len -= opt->ip6o_len + off; } - vv->Assign(vv->Size(), rv); + vv->Assign(vv->Size(), std::move(rv)); } return vv; @@ -188,7 +188,7 @@ IntrusivePtr IPv6_Hdr::ToVal(IntrusivePtr chain) const rv->Assign(3, val_mgr->Count(mob->ip6mob_rsv)); rv->Assign(4, val_mgr->Count(ntohs(mob->ip6mob_chksum))); - RecordVal* msg = new RecordVal(hdrType(ip6_mob_msg_type, "ip6_mobility_msg")); + auto msg = make_intrusive(hdrType(ip6_mob_msg_type, "ip6_mobility_msg")); msg->Assign(0, val_mgr->Count(mob->ip6mob_type)); uint16_t off = sizeof(ip6_mobility); @@ -197,63 +197,63 @@ IntrusivePtr IPv6_Hdr::ToVal(IntrusivePtr chain) const switch ( mob->ip6mob_type ) { case 0: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_brr")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_brr")); m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data)))); off += sizeof(uint16_t); m->Assign(1, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(1, m); + msg->Assign(1, std::move(m)); } break; case 1: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_hoti")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_hoti")); m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data)))); m->Assign(1, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t)))))); off += sizeof(uint16_t) + sizeof(uint64_t); m->Assign(2, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(2, m); + msg->Assign(2, std::move(m)); break; } case 2: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_coti")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_coti")); m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data)))); m->Assign(1, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t)))))); off += sizeof(uint16_t) + sizeof(uint64_t); m->Assign(2, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(3, m); + msg->Assign(3, std::move(m)); break; } case 3: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_hot")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_hot")); m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data)))); m->Assign(1, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t)))))); m->Assign(2, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t) + sizeof(uint64_t)))))); off += sizeof(uint16_t) + 2 * sizeof(uint64_t); m->Assign(3, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(4, m); + msg->Assign(4, std::move(m)); break; } case 4: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_cot")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_cot")); m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data)))); m->Assign(1, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t)))))); m->Assign(2, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t) + sizeof(uint64_t)))))); off += sizeof(uint16_t) + 2 * sizeof(uint64_t); m->Assign(3, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(5, m); + msg->Assign(5, std::move(m)); break; } case 5: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_bu")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_bu")); m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data)))); m->Assign(1, val_mgr->Bool(ntohs(*((uint16_t*)(msg_data + sizeof(uint16_t)))) & 0x8000)); m->Assign(2, val_mgr->Bool(ntohs(*((uint16_t*)(msg_data + sizeof(uint16_t)))) & 0x4000)); @@ -262,32 +262,32 @@ IntrusivePtr IPv6_Hdr::ToVal(IntrusivePtr chain) const m->Assign(5, val_mgr->Count(ntohs(*((uint16_t*)(msg_data + 2*sizeof(uint16_t)))))); off += 3 * sizeof(uint16_t); m->Assign(6, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(6, m); + msg->Assign(6, std::move(m)); break; } case 6: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_back")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_back")); m->Assign(0, val_mgr->Count(*((uint8_t*)msg_data))); m->Assign(1, val_mgr->Bool(*((uint8_t*)(msg_data + sizeof(uint8_t))) & 0x80)); m->Assign(2, val_mgr->Count(ntohs(*((uint16_t*)(msg_data + sizeof(uint16_t)))))); m->Assign(3, val_mgr->Count(ntohs(*((uint16_t*)(msg_data + 2*sizeof(uint16_t)))))); off += 3 * sizeof(uint16_t); m->Assign(4, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(7, m); + msg->Assign(7, std::move(m)); break; } case 7: { - RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_be")); + auto m = make_intrusive(hdrType(ip6_mob_brr_type, "ip6_mobility_be")); m->Assign(0, val_mgr->Count(*((uint8_t*)msg_data))); const in6_addr* hoa = (const in6_addr*)(msg_data + sizeof(uint16_t)); m->Assign(1, make_intrusive(IPAddr(*hoa))); off += sizeof(uint16_t) + sizeof(in6_addr); m->Assign(2, BuildOptionsVal(data + off, Length() - off)); - msg->Assign(8, m); + msg->Assign(8, std::move(m)); break; } @@ -403,7 +403,7 @@ IntrusivePtr IP_Hdr::ToPktHdrVal(IntrusivePtr pkt_hdr, int case IPPROTO_TCP: { const struct tcphdr* tp = (const struct tcphdr*) data; - RecordVal* tcp_hdr = new RecordVal(tcp_hdr_type); + auto tcp_hdr = make_intrusive(tcp_hdr_type); int tcp_hdr_len = tp->th_off * 4; int data_len = PayloadLen() - tcp_hdr_len; @@ -418,42 +418,42 @@ IntrusivePtr IP_Hdr::ToPktHdrVal(IntrusivePtr pkt_hdr, int tcp_hdr->Assign(7, val_mgr->Count(tp->th_flags)); tcp_hdr->Assign(8, val_mgr->Count(ntohs(tp->th_win))); - pkt_hdr->Assign(sindex + 2, tcp_hdr); + pkt_hdr->Assign(sindex + 2, std::move(tcp_hdr)); break; } case IPPROTO_UDP: { const struct udphdr* up = (const struct udphdr*) data; - RecordVal* udp_hdr = new RecordVal(udp_hdr_type); + auto udp_hdr = make_intrusive(udp_hdr_type); udp_hdr->Assign(0, val_mgr->Port(ntohs(up->uh_sport), TRANSPORT_UDP)); udp_hdr->Assign(1, val_mgr->Port(ntohs(up->uh_dport), TRANSPORT_UDP)); udp_hdr->Assign(2, val_mgr->Count(ntohs(up->uh_ulen))); - pkt_hdr->Assign(sindex + 3, udp_hdr); + pkt_hdr->Assign(sindex + 3, std::move(udp_hdr)); break; } case IPPROTO_ICMP: { const struct icmp* icmpp = (const struct icmp *) data; - RecordVal* icmp_hdr = new RecordVal(icmp_hdr_type); + auto icmp_hdr = make_intrusive(icmp_hdr_type); icmp_hdr->Assign(0, val_mgr->Count(icmpp->icmp_type)); - pkt_hdr->Assign(sindex + 4, icmp_hdr); + pkt_hdr->Assign(sindex + 4, std::move(icmp_hdr)); break; } case IPPROTO_ICMPV6: { const struct icmp6_hdr* icmpp = (const struct icmp6_hdr*) data; - RecordVal* icmp_hdr = new RecordVal(icmp_hdr_type); + auto icmp_hdr = make_intrusive(icmp_hdr_type); icmp_hdr->Assign(0, val_mgr->Count(icmpp->icmp6_type)); - pkt_hdr->Assign(sindex + 4, icmp_hdr); + pkt_hdr->Assign(sindex + 4, std::move(icmp_hdr)); break; } @@ -713,7 +713,7 @@ IntrusivePtr IPv6_Hdr_Chain::ToVal() const for ( size_t i = 1; i < chain.size(); ++i ) { auto v = chain[i]->ToVal(); - RecordVal* ext_hdr = new RecordVal(ip6_ext_hdr_type); + auto ext_hdr = make_intrusive(ip6_ext_hdr_type); uint8_t type = chain[i]->Type(); ext_hdr->Assign(0, val_mgr->Count(type)); @@ -743,11 +743,10 @@ IntrusivePtr IPv6_Hdr_Chain::ToVal() const #endif default: reporter->InternalWarning("IPv6_Hdr_Chain bad header %d", type); - Unref(ext_hdr); continue; } - rval->Assign(rval->Size(), ext_hdr); + rval->Assign(rval->Size(), std::move(ext_hdr)); } return rval;