/* * Pack the record 'rwrec' into an array of bytes 'ar' */ static int ipv6ioRecordPack_V2( skstream_t *rwIOS, const rwGenericRec_V5 *rwrec, uint8_t *ar) { uint32_t ip; int rv; /* Start time, TCP Flags, Protocol, TCP State */ rv = rwpackPackTimesFlagsProto(rwrec, ar, rwIOS->hdr_starttime); if (rv) { return rv; } /* application */ rwRecMemGetApplication(rwrec, &ar[6]); /* sPort, dPort */ rwRecMemGetSPort(rwrec, &ar[ 8]); rwRecMemGetDPort(rwrec, &ar[10]); /* Elapsed */ rwRecMemGetElapsed(rwrec, &ar[12]); /* packets, bytes */ rwRecMemGetPkts(rwrec, &ar[16]); rwRecMemGetBytes(rwrec, &ar[20]); /* sIP, dIP */ if (rwRecIsIPv6(rwrec)) { /* Record is IPv6 */ #if !SK_ENABLE_IPV6 return SKSTREAM_ERR_UNSUPPORT_IPV6; #else ar[ 5] |= 0x80; rwRecMemGetSIPv6(rwrec, &ar[24]); rwRecMemGetDIPv6(rwrec, &ar[40]); #endif /* SK_ENABLE_IPV6 */ } else { /* Record is IPv4, but encode as IPv6 */ ip = htonl(rwRecGetSIPv4(rwrec)); memcpy(&ar[24], IP4in6_prefix, sizeof(IP4in6_prefix)); memcpy(&ar[24+12], &ip, sizeof(ip)); ip = htonl(rwRecGetDIPv4(rwrec)); memcpy(&ar[40], IP4in6_prefix, sizeof(IP4in6_prefix)); memcpy(&ar[40+12], &ip, sizeof(ip)); } /* swap if required */ if (rwIOS->swapFlag) { ipv6ioRecordSwap_V2(ar); } return SKSTREAM_OK; }
/* * Pack the record 'rwrec' into an array of bytes 'ar' */ static int augsnmpoutioRecordPack_V5( skstream_t *stream, const rwGenericRec_V5 *rwrec, uint8_t *ar) { int rv; /* Start time, TCP Flags, Protocol, TCP State */ rv = rwpackPackTimesFlagsProto(rwrec, ar, stream->hdr_starttime); if (rv) { return rv; } /* application */ rwRecMemGetApplication(rwrec, &ar[6]); /* sPort, dPort */ rwRecMemGetSPort(rwrec, &ar[ 8]); rwRecMemGetDPort(rwrec, &ar[10]); /* Elapsed */ rwRecMemGetElapsed(rwrec, &ar[12]); /* packets, bytes */ rwRecMemGetPkts(rwrec, &ar[16]); rwRecMemGetBytes(rwrec, &ar[20]); /* sIP, dIP */ rwRecMemGetSIPv4(rwrec, &ar[24]); rwRecMemGetDIPv4(rwrec, &ar[28]); /* output */ rwRecMemGetOutput(rwrec, &ar[32]); /* swap if required */ if (stream->swapFlag) { augsnmpoutioRecordSwap_V5(ar); } return SKSTREAM_OK; }