mirror of
https://github.com/zeek/zeek.git
synced 2025-10-14 20:48:21 +00:00
Migrate IP.cc to use IntrusivePtr
This commit is contained in:
parent
a60e5e9582
commit
b05e5c7686
1 changed files with 31 additions and 32 deletions
63
src/IP.cc
63
src/IP.cc
|
@ -42,14 +42,14 @@ static inline RecordType* hdrType(RecordType*& type, const char* name)
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VectorVal* BuildOptionsVal(const u_char* data, int len)
|
static IntrusivePtr<VectorVal> BuildOptionsVal(const u_char* data, int len)
|
||||||
{
|
{
|
||||||
VectorVal* vv = new VectorVal(internal_type("ip6_options")->AsVectorType());
|
auto vv = make_intrusive<VectorVal>(internal_type("ip6_options")->AsVectorType());
|
||||||
|
|
||||||
while ( len > 0 )
|
while ( len > 0 )
|
||||||
{
|
{
|
||||||
const struct ip6_opt* opt = (const struct ip6_opt*) data;
|
const struct ip6_opt* opt = (const struct ip6_opt*) data;
|
||||||
RecordVal* rv = new RecordVal(hdrType(ip6_option_type, "ip6_option"));
|
auto rv = make_intrusive<RecordVal>(hdrType(ip6_option_type, "ip6_option"));
|
||||||
rv->Assign(0, val_mgr->Count(opt->ip6o_type));
|
rv->Assign(0, val_mgr->Count(opt->ip6o_type));
|
||||||
|
|
||||||
if ( opt->ip6o_type == 0 )
|
if ( opt->ip6o_type == 0 )
|
||||||
|
@ -71,7 +71,7 @@ static VectorVal* BuildOptionsVal(const u_char* data, int len)
|
||||||
len -= opt->ip6o_len + off;
|
len -= opt->ip6o_len + off;
|
||||||
}
|
}
|
||||||
|
|
||||||
vv->Assign(vv->Size(), rv);
|
vv->Assign(vv->Size(), std::move(rv));
|
||||||
}
|
}
|
||||||
|
|
||||||
return vv;
|
return vv;
|
||||||
|
@ -188,7 +188,7 @@ IntrusivePtr<RecordVal> IPv6_Hdr::ToVal(IntrusivePtr<VectorVal> chain) const
|
||||||
rv->Assign(3, val_mgr->Count(mob->ip6mob_rsv));
|
rv->Assign(3, val_mgr->Count(mob->ip6mob_rsv));
|
||||||
rv->Assign(4, val_mgr->Count(ntohs(mob->ip6mob_chksum)));
|
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<RecordVal>(hdrType(ip6_mob_msg_type, "ip6_mobility_msg"));
|
||||||
msg->Assign(0, val_mgr->Count(mob->ip6mob_type));
|
msg->Assign(0, val_mgr->Count(mob->ip6mob_type));
|
||||||
|
|
||||||
uint16_t off = sizeof(ip6_mobility);
|
uint16_t off = sizeof(ip6_mobility);
|
||||||
|
@ -197,63 +197,63 @@ IntrusivePtr<RecordVal> IPv6_Hdr::ToVal(IntrusivePtr<VectorVal> chain) const
|
||||||
switch ( mob->ip6mob_type ) {
|
switch ( mob->ip6mob_type ) {
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_brr"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_brr"));
|
||||||
m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data))));
|
m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data))));
|
||||||
off += sizeof(uint16_t);
|
off += sizeof(uint16_t);
|
||||||
m->Assign(1, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(1, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(1, m);
|
msg->Assign(1, std::move(m));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_hoti"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_hoti"));
|
||||||
m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data))));
|
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(1, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t))))));
|
||||||
off += sizeof(uint16_t) + sizeof(uint64_t);
|
off += sizeof(uint16_t) + sizeof(uint64_t);
|
||||||
m->Assign(2, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(2, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(2, m);
|
msg->Assign(2, std::move(m));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_coti"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_coti"));
|
||||||
m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data))));
|
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(1, val_mgr->Count(ntohll(*((uint64_t*)(msg_data + sizeof(uint16_t))))));
|
||||||
off += sizeof(uint16_t) + sizeof(uint64_t);
|
off += sizeof(uint16_t) + sizeof(uint64_t);
|
||||||
m->Assign(2, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(2, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(3, m);
|
msg->Assign(3, std::move(m));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_hot"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_hot"));
|
||||||
m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data))));
|
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(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))))));
|
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);
|
off += sizeof(uint16_t) + 2 * sizeof(uint64_t);
|
||||||
m->Assign(3, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(3, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(4, m);
|
msg->Assign(4, std::move(m));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_cot"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_cot"));
|
||||||
m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data))));
|
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(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))))));
|
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);
|
off += sizeof(uint16_t) + 2 * sizeof(uint64_t);
|
||||||
m->Assign(3, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(3, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(5, m);
|
msg->Assign(5, std::move(m));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_bu"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_bu"));
|
||||||
m->Assign(0, val_mgr->Count(ntohs(*((uint16_t*)msg_data))));
|
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(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));
|
m->Assign(2, val_mgr->Bool(ntohs(*((uint16_t*)(msg_data + sizeof(uint16_t)))) & 0x4000));
|
||||||
|
@ -262,32 +262,32 @@ IntrusivePtr<RecordVal> IPv6_Hdr::ToVal(IntrusivePtr<VectorVal> chain) const
|
||||||
m->Assign(5, val_mgr->Count(ntohs(*((uint16_t*)(msg_data + 2*sizeof(uint16_t))))));
|
m->Assign(5, val_mgr->Count(ntohs(*((uint16_t*)(msg_data + 2*sizeof(uint16_t))))));
|
||||||
off += 3 * sizeof(uint16_t);
|
off += 3 * sizeof(uint16_t);
|
||||||
m->Assign(6, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(6, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(6, m);
|
msg->Assign(6, std::move(m));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_back"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_back"));
|
||||||
m->Assign(0, val_mgr->Count(*((uint8_t*)msg_data)));
|
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(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(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))))));
|
m->Assign(3, val_mgr->Count(ntohs(*((uint16_t*)(msg_data + 2*sizeof(uint16_t))))));
|
||||||
off += 3 * sizeof(uint16_t);
|
off += 3 * sizeof(uint16_t);
|
||||||
m->Assign(4, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(4, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(7, m);
|
msg->Assign(7, std::move(m));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
{
|
{
|
||||||
RecordVal* m = new RecordVal(hdrType(ip6_mob_brr_type, "ip6_mobility_be"));
|
auto m = make_intrusive<RecordVal>(hdrType(ip6_mob_brr_type, "ip6_mobility_be"));
|
||||||
m->Assign(0, val_mgr->Count(*((uint8_t*)msg_data)));
|
m->Assign(0, val_mgr->Count(*((uint8_t*)msg_data)));
|
||||||
const in6_addr* hoa = (const in6_addr*)(msg_data + sizeof(uint16_t));
|
const in6_addr* hoa = (const in6_addr*)(msg_data + sizeof(uint16_t));
|
||||||
m->Assign(1, make_intrusive<AddrVal>(IPAddr(*hoa)));
|
m->Assign(1, make_intrusive<AddrVal>(IPAddr(*hoa)));
|
||||||
off += sizeof(uint16_t) + sizeof(in6_addr);
|
off += sizeof(uint16_t) + sizeof(in6_addr);
|
||||||
m->Assign(2, BuildOptionsVal(data + off, Length() - off));
|
m->Assign(2, BuildOptionsVal(data + off, Length() - off));
|
||||||
msg->Assign(8, m);
|
msg->Assign(8, std::move(m));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -403,7 +403,7 @@ IntrusivePtr<RecordVal> IP_Hdr::ToPktHdrVal(IntrusivePtr<RecordVal> pkt_hdr, int
|
||||||
case IPPROTO_TCP:
|
case IPPROTO_TCP:
|
||||||
{
|
{
|
||||||
const struct tcphdr* tp = (const struct tcphdr*) data;
|
const struct tcphdr* tp = (const struct tcphdr*) data;
|
||||||
RecordVal* tcp_hdr = new RecordVal(tcp_hdr_type);
|
auto tcp_hdr = make_intrusive<RecordVal>(tcp_hdr_type);
|
||||||
|
|
||||||
int tcp_hdr_len = tp->th_off * 4;
|
int tcp_hdr_len = tp->th_off * 4;
|
||||||
int data_len = PayloadLen() - tcp_hdr_len;
|
int data_len = PayloadLen() - tcp_hdr_len;
|
||||||
|
@ -418,42 +418,42 @@ IntrusivePtr<RecordVal> IP_Hdr::ToPktHdrVal(IntrusivePtr<RecordVal> pkt_hdr, int
|
||||||
tcp_hdr->Assign(7, val_mgr->Count(tp->th_flags));
|
tcp_hdr->Assign(7, val_mgr->Count(tp->th_flags));
|
||||||
tcp_hdr->Assign(8, val_mgr->Count(ntohs(tp->th_win)));
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IPPROTO_UDP:
|
case IPPROTO_UDP:
|
||||||
{
|
{
|
||||||
const struct udphdr* up = (const struct udphdr*) data;
|
const struct udphdr* up = (const struct udphdr*) data;
|
||||||
RecordVal* udp_hdr = new RecordVal(udp_hdr_type);
|
auto udp_hdr = make_intrusive<RecordVal>(udp_hdr_type);
|
||||||
|
|
||||||
udp_hdr->Assign(0, val_mgr->Port(ntohs(up->uh_sport), TRANSPORT_UDP));
|
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(1, val_mgr->Port(ntohs(up->uh_dport), TRANSPORT_UDP));
|
||||||
udp_hdr->Assign(2, val_mgr->Count(ntohs(up->uh_ulen)));
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IPPROTO_ICMP:
|
case IPPROTO_ICMP:
|
||||||
{
|
{
|
||||||
const struct icmp* icmpp = (const struct icmp *) data;
|
const struct icmp* icmpp = (const struct icmp *) data;
|
||||||
RecordVal* icmp_hdr = new RecordVal(icmp_hdr_type);
|
auto icmp_hdr = make_intrusive<RecordVal>(icmp_hdr_type);
|
||||||
|
|
||||||
icmp_hdr->Assign(0, val_mgr->Count(icmpp->icmp_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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IPPROTO_ICMPV6:
|
case IPPROTO_ICMPV6:
|
||||||
{
|
{
|
||||||
const struct icmp6_hdr* icmpp = (const struct icmp6_hdr*) data;
|
const struct icmp6_hdr* icmpp = (const struct icmp6_hdr*) data;
|
||||||
RecordVal* icmp_hdr = new RecordVal(icmp_hdr_type);
|
auto icmp_hdr = make_intrusive<RecordVal>(icmp_hdr_type);
|
||||||
|
|
||||||
icmp_hdr->Assign(0, val_mgr->Count(icmpp->icmp6_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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -713,7 +713,7 @@ IntrusivePtr<VectorVal> IPv6_Hdr_Chain::ToVal() const
|
||||||
for ( size_t i = 1; i < chain.size(); ++i )
|
for ( size_t i = 1; i < chain.size(); ++i )
|
||||||
{
|
{
|
||||||
auto v = chain[i]->ToVal();
|
auto v = chain[i]->ToVal();
|
||||||
RecordVal* ext_hdr = new RecordVal(ip6_ext_hdr_type);
|
auto ext_hdr = make_intrusive<RecordVal>(ip6_ext_hdr_type);
|
||||||
uint8_t type = chain[i]->Type();
|
uint8_t type = chain[i]->Type();
|
||||||
ext_hdr->Assign(0, val_mgr->Count(type));
|
ext_hdr->Assign(0, val_mgr->Count(type));
|
||||||
|
|
||||||
|
@ -743,11 +743,10 @@ IntrusivePtr<VectorVal> IPv6_Hdr_Chain::ToVal() const
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
reporter->InternalWarning("IPv6_Hdr_Chain bad header %d", type);
|
reporter->InternalWarning("IPv6_Hdr_Chain bad header %d", type);
|
||||||
Unref(ext_hdr);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
rval->Assign(rval->Size(), ext_hdr);
|
rval->Assign(rval->Size(), std::move(ext_hdr));
|
||||||
}
|
}
|
||||||
|
|
||||||
return rval;
|
return rval;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue