18 #include <arpa/inet.h>
26 #define PKTLAB_IP4_ADDR_LEN PKTLAB_IPV4_WO_MSK_ADDR_LEN
27 #define PKTLAB_IP4_MASK_LEN \
28 (PKTLAB_IPV4_W_MSK_ADDR_LEN-PKTLAB_IPV4_W_MSK_ADDR_LEN)
29 #define PKTLAB_IP6_ADDR_LEN PKTLAB_IPV6_ADDR_LEN
31 #define PKTLAB_IPV4_W_MSK_ADDR_LEN 8
32 #define PKTLAB_IPV4_WO_MSK_ADDR_LEN 4
33 #define PKTLAB_IPV6_ADDR_LEN 16
35 #define PKTLAB_ADDRLEN_MAX PKTLAB_IP6_ADDR_LEN
36 #define PKTLAB_PORTLEN_MAX 2
38 #define PKTLAB_DEFAULT_ADDR_STR "127.0.0.1"
44 #define PKTLAB_DEFAULT_EXP_PORT_STR "20556"
49 #define PKTLAB_DEFAULT_PUB_PORT_STR "20556"
54 #define PKTLAB_DEFAULT_SUB_PORT_STR "20557"
59 #define PKTLAB_DEFAULT_PROXY_SETUP_PORT_STR "20557"
61 #define PKTLAB_DEFAULT_SPEC_STR \
62 PKTLAB_DEFAULT_ADDR_STR ":" PKTLAB_DEFAULT_EXP_PORT_STR
68 #define PKTLAB_MAX_SKT_CNT 0x100
74 #define PKTLAB_MAX_LADDR_CNT 0x100
80 #define PKTLAB_MAX_LDNSADDR_CNT 0x10
82 #define PKTLAB_SHA256_DIGEST_LEN 32
83 #define PKTLAB_ED25519_SIG_LEN 64
96 #define PKTLAB_TICKS_PER_SECOND UINT64_C(1000000000)
97 #define PKTLAB_TIME_MAX UINT64_MAX
158 #define PKTLAB_NAMEVALUE_PAIR_SEP '='
159 #define PKTLAB_NAMEVALUE_PAIR_END ';'
165 #define PKTLAB_NAMEVALUE_NAMELEN_MIN 0x1
171 #define PKTLAB_NAMEVALUE_NAMELEN_MAX 0x20
177 #define PKTLAB_NAMEVALUE_VALUELEN_MIN 0x1
183 #define PKTLAB_NAMEVALUE_VALUELEN_MAX 0x100
192 uint_fast32_t namelen;
193 uint_fast32_t valuelen;
217 const char * xdescr, uint_fast32_t xdescrlen,
235 char * buf, uint_fast32_t buflen, uint_fast32_t * used);
249 const char * dattr, uint_fast32_t dattrlen,
266 char * buf, uint_fast32_t buflen, uint_fast32_t * used);
288 const char * xdescr, uint_fast32_t xdescrlen,
289 const char * dattr, uint_fast32_t dattrlen);
295 #define PKTLAB_CHANNELID_LEN_MIN 1
296 #define PKTLAB_CHANNELID_LEN_MAX PKTLAB_SHA256_DIGEST_LEN
304 uint_fast32_t channellen;
323 void ** chlistptr, uint_fast32_t * chlistlen);
338 const void * chlistptr, uint_fast32_t chlistlen,
377 #define PKTLAB_EBPF_INSTR_LEN sizeof(struct pktlab_ebpf_instr)
383 #define PKTLAB_ENC_EBPF_INSTR_LEN 8
398 const void * prog, uint_fast32_t proglen,
399 void ** buf, uint_fast32_t * buflen);
414 const void * buf, uint_fast32_t buflen,
416 void ** prog, uint_fast32_t * proglen);
427 const void * data, uint_fast32_t datalen, uint8_t * digest);
449 const char * data, uint_fast32_t datalen,
451 void ** prog, uint_fast32_t * proglen,
452 uint_fast32_t * errlineno);
482 uint_fast32_t hostlen;
505 const void * restrict ptr, uint_fast32_t len);
515 #define PKTLAB_VMEMADDR_CURPKT (0x0)
516 #define PKTLAB_VMEMADDR_CURPKT_DATA (PKTLAB_VMEMADDR_CURPKT)
517 #define PKTLAB_VMEMADDR_CURPKT_LEN (PKTLAB_VMEMADDR_CURPKT+0x1000000)
518 #define PKTLAB_VMEMADDR_CURPKT_SKTID (PKTLAB_VMEMADDR_CURPKT+0x1000010)
520 #define PKTLAB_VMEMADDR_CURPKT_SL (0x1000011)
521 #define PKTLAB_VMEMADDR_CURPKT_DATA_FL (sizeof(uint8_t)*0x1000000)
522 #define PKTLAB_VMEMADDR_CURPKT_LEN_FL (sizeof(uint32_t))
523 #define PKTLAB_VMEMADDR_CURPKT_SKTID_FL (sizeof(uint8_t))
526 #define PKTLAB_VMEMADDR_SYSPARAM (0x10000000)
527 #define PKTLAB_VMEMADDR_SYSPARAM_IP4NO (PKTLAB_VMEMADDR_SYSPARAM)
528 #define PKTLAB_VMEMADDR_SYSPARAM_IP6NO (PKTLAB_VMEMADDR_SYSPARAM+0x1)
529 #define PKTLAB_VMEMADDR_SYSPARAM_TRANSSUP (PKTLAB_VMEMADDR_SYSPARAM+0x2)
530 #define PKTLAB_VMEMADDR_SYSPARAM_BUFMAXDUP (PKTLAB_VMEMADDR_SYSPARAM+0x6)
531 #define PKTLAB_VMEMADDR_SYSPARAM_IP4LS (PKTLAB_VMEMADDR_SYSPARAM+0x100)
532 #define PKTLAB_VMEMADDR_SYSPARAM_IP6LS (PKTLAB_VMEMADDR_SYSPARAM+0x1000)
533 #define PKTLAB_VMEMADDR_SYSPARAM_TIME (PKTLAB_VMEMADDR_SYSPARAM+0x10000)
534 #define PKTLAB_VMEMADDR_SYSPARAM_BUFMAX (PKTLAB_VMEMADDR_SYSPARAM+0x10010)
535 #define PKTLAB_VMEMADDR_SYSPARAM_BUFUSED (PKTLAB_VMEMADDR_SYSPARAM+0x10014)
536 #define PKTLAB_VMEMADDR_SYSPARAM_IP4DNSNO (PKTLAB_VMEMADDR_SYSPARAM+0x20000)
537 #define PKTLAB_VMEMADDR_SYSPARAM_IP6DNSNO (PKTLAB_VMEMADDR_SYSPARAM+0x20001)
538 #define PKTLAB_VMEMADDR_SYSPARAM_IP4DNSLS (PKTLAB_VMEMADDR_SYSPARAM+0x20010)
539 #define PKTLAB_VMEMADDR_SYSPARAM_IP6DNSLS (PKTLAB_VMEMADDR_SYSPARAM+0x20100)
540 #define PKTLAB_VMEMADDR_SYSPARAM_IP4HDRMOD (PKTLAB_VMEMADDR_SYSPARAM+0x20200)
541 #define PKTLAB_VMEMADDR_SYSPARAM_IP6HDRMOD (PKTLAB_VMEMADDR_SYSPARAM+0x20210)
542 #define PKTLAB_VMEMADDR_SYSPARAM_HOSTID (PKTLAB_VMEMADDR_SYSPARAM+0x30000)
543 #define PKTLAB_VMEMADDR_SYSPARAM_LATLONG (PKTLAB_VMEMADDR_SYSPARAM+0x30100)
544 #define PKTLAB_VMEMADDR_SYSPARAM_OSINFO (PKTLAB_VMEMADDR_SYSPARAM+0x30200)
546 #define PKTLAB_VMEMADDR_SYSPARAM_SL (0x30400)
547 #define PKTLAB_VMEMADDR_SYSPARAM_IP4NO_FL (sizeof(uint8_t))
548 #define PKTLAB_VMEMADDR_SYSPARAM_IP6NO_FL (sizeof(uint8_t))
549 #define PKTLAB_VMEMADDR_SYSPARAM_TRANSSUP_FL (sizeof(uint32_t))
550 #define PKTLAB_VMEMADDR_SYSPARAM_IP4LS_FL (sizeof(uint8_t)*PKTLAB_IPV4_W_MSK_ADDR_LEN*0x100)
551 #define PKTLAB_VMEMADDR_SYSPARAM_IP6LS_FL (sizeof(uint8_t)*PKTLAB_IPV6_ADDR_LEN*0x100)
552 #define PKTLAB_VMEMADDR_SYSPARAM_TIME_FL (sizeof(pktlab_time_t))
553 #define PKTLAB_VMEMADDR_SYSPARAM_BUFMAX_FL (sizeof(uint32_t))
554 #define PKTLAB_VMEMADDR_SYSPARAM_BUFUSED_FL (sizeof(uint32_t))
555 #define PKTLAB_VMEMADDR_SYSPARAM_IP4DNSNO_FL (sizeof(uint8_t))
556 #define PKTLAB_VMEMADDR_SYSPARAM_IP6DNSNO_FL (sizeof(uint8_t))
557 #define PKTLAB_VMEMADDR_SYSPARAM_IP4DNSLS_FL (sizeof(uint8_t)*PKTLAB_IPV4_WO_MSK_ADDR_LEN*0x10)
558 #define PKTLAB_VMEMADDR_SYSPARAM_IP6DNSLS_FL (sizeof(uint8_t)*PKTLAB_IPV6_ADDR_LEN*0x10)
559 #define PKTLAB_VMEMADDR_SYSPARAM_IP4HDRMOD_FL (sizeof(uint8_t)*0xC)
560 #define PKTLAB_VMEMADDR_SYSPARAM_IP6HDRMOD_FL (sizeof(uint8_t)*0x8)
561 #define PKTLAB_VMEMADDR_SYSPARAM_HOSTID_FL (sizeof(char)*0x100)
562 #define PKTLAB_VMEMADDR_SYSPARAM_LATLONG_FL (sizeof(char)*0x40)
563 #define PKTLAB_VMEMADDR_SYSPARAM_OSINFO_FL (sizeof(char)*0x200)
566 #define PKTLAB_VMEMADDR_SKTINFO (0x20000000)
567 #define PKTLAB_VMEMADDR_SKTINFO_BLKLEN (0x400)
568 #define PKTLAB_VMEMADDR_SKTINFO_FAMILY (0x0)
569 #define PKTLAB_VMEMADDR_SKTINFO_PROTO (0x1)
570 #define PKTLAB_VMEMADDR_SKTINFO_STAT (0x2)
571 #define PKTLAB_VMEMADDR_SKTINFO_LADDR (0x10)
572 #define PKTLAB_VMEMADDR_SKTINFO_RADDR (0x20)
573 #define PKTLAB_VMEMADDR_SKTINFO_LPORT (0x30)
574 #define PKTLAB_VMEMADDR_SKTINFO_RPORT (0x32)
575 #define PKTLAB_VMEMADDR_SKTINFO_RBUFSZ (0x40)
576 #define PKTLAB_VMEMADDR_SKTINFO_RBUFUSED (0x44)
577 #define PKTLAB_VMEMADDR_SKTINFO_DROPSTAT (0x50)
578 #define PKTLAB_VMEMADDR_SKTINFO_NSENDERR (0x60)
579 #define PKTLAB_VMEMADDR_SKTINFO_NSENDERRTAG (0x61)
580 #define PKTLAB_VMEMADDR_SKTINFO_NOTIFMASK (0x70)
581 #define PKTLAB_VMEMADDR_SKTINFO_CTFL (0x100)
583 #define PKTLAB_VMEMADDR_SKTINFO_SL (PKTLAB_VMEMADDR_SKTINFO_BLKLEN*0x100)
584 #define PKTLAB_VMEMADDR_SKTINFO_PROTO_FL (sizeof(uint8_t))
585 #define PKTLAB_VMEMADDR_SKTINFO_STAT_FL (sizeof(int8_t))
586 #define PKTLAB_VMEMADDR_SKTINFO_LADDR_FL (sizeof(uint8_t)*PKTLAB_ADDRLEN_MAX)
587 #define PKTLAB_VMEMADDR_SKTINFO_RADDR_FL (sizeof(uint8_t)*PKTLAB_ADDRLEN_MAX)
588 #define PKTLAB_VMEMADDR_SKTINFO_LPORT_FL (sizeof(uint16_t))
589 #define PKTLAB_VMEMADDR_SKTINFO_RPORT_FL (sizeof(uint16_t))
590 #define PKTLAB_VMEMADDR_SKTINFO_RBUFSZ_FL (sizeof(uint32_t))
591 #define PKTLAB_VMEMADDR_SKTINFO_RBUFUSED_FL (sizeof(uint32_t))
592 #define PKTLAB_VMEMADDR_SKTINFO_DROPSTAT_FL (sizeof(uint32_t)*2)
593 #define PKTLAB_VMEMADDR_SKTINFO_NSENDERR_FL (sizeof(int8_t))
594 #define PKTLAB_VMEMADDR_SKTINFO_NSENDERRTAG_FL (sizeof(uint16_t))
595 #define PKTLAB_VMEMADDR_SKTINFO_NOTIFMASK_FL (sizeof(uint16_t))
596 #define PKTLAB_VMEMADDR_SKTINFO_CTFL_FL (sizeof(uint8_t)*0x80)
599 #define PKTLAB_VMEMADDR_NSENDTSTP (0x30000000)
600 #define PKTLAB_VMEMADDR_MONSCRATCH (0x40000000)
601 #define PKTLAB_VMEMADDR_MONPERSIST (0x50000000)
603 #define PKTLAB_VMEMADDR_NSENDTSTP_SL (sizeof(pktlab_time_t)*0x10000)
604 #define PKTLAB_VMEMADDR_MONSCRATCH_SL (sizeof(uint8_t)*0x10000000)
605 #define PKTLAB_VMEMADDR_MONPERSIST_SL (sizeof(uint8_t)*0x10000000)
610 #define PKTLAB_RAW_SUP_BIT_INDX 0
611 #define PKTLAB_TCP_SUP_BIT_INDX 1
612 #define PKTLAB_UDP_SUP_BIT_INDX 2
617 enum pktlab_rawhdr_info {
618 PKTLAB_RAWHDR_NOCHG = 0,
619 PKTLAB_RAWHDR_CHG = 1,
620 PKTLAB_RAWHDR_0FILL = 2
626 enum pktlab_socket_state {
627 PKTLAB_SKTST_FREE = 0,
628 PKTLAB_SKTST_OPENING = 1,
629 PKTLAB_SKTST_OPEN = 2,
630 PKTLAB_SKTST_EOF = 3,
631 PKTLAB_SKTST_WFIN = 4,
632 PKTLAB_SKTST_END = 5,
633 PKTLAB_SKTST_REFUSED = -1,
634 PKTLAB_SKTST_RESET = -2,
635 PKTLAB_SKTST_TIMEDOUT = -3,
636 PKTLAB_SKTST_UNREACH = -4,
637 PKTLAB_SKTST_UNKFAULT = -128
643 enum pktlab_nsend_err {
644 PKTLAB_NSEND_SUCCESS = 0,
645 PKTLAB_NSEND_NORES = 1,
646 PKTLAB_NSEND_BADPKT = 2,
647 PKTLAB_NSEND_TIMEDOUT = 3,
648 PKTLAB_NSEND_RESET = 4,
649 PKTLAB_NSEND_UNREACH = 5,
650 PKTLAB_NSEND_WFIN = 6,
651 PKTLAB_NSEND_UNKFAULT = 127
657 #define PKTLAB_NOTIFMASK_NTAG (0x1 << 1)
658 #define PKTLAB_NOTIFMASK_NSTAT (0x1 << 2)
659 #define PKTLAB_NOTIFMASK_NDATA (0x1 << 3)
660 #define PKTLAB_NOTIFMASK_NDROP (0x1 << 4)
661 #define PKTLAB_NOTIFMASK_NBLOCK (0x1 << 5)
668 typedef void (*pktlab_vmem_reader_t) (
670 uint_fast32_t off, uint_fast32_t len,
void * restrict dst);
672 typedef void (*pktlab_vmem_writer_t) (
674 uint_fast32_t off, uint_fast32_t len,
const void * restrict src);
678 pktlab_vmem_reader_t read;
679 pktlab_vmem_writer_t write;
683 extern void pktlab_vmem_read (
685 uint_fast32_t addr, uint_fast32_t len,
void * restrict dst);
687 extern void pktlab_vmem_write (
689 uint_fast32_t addr, uint_fast32_t len,
const void * restrict src);
691 extern void pktlab_buffer_reader (
693 uint_fast32_t addr, uint_fast32_t len,
void * restrict dst);
695 extern void pktlab_buffer_writer (
697 uint_fast32_t addr, uint_fast32_t len,
const void * restrict src);
706 #define PKTLAB_MREAD_MAX UINT32_C(0x10000)
707 #define PKTLAB_NDATA_MAX UINT32_C(0x10000)
724 #define PKTLAB_IP4_PROTO 0x4
725 #define PKTLAB_IP6_PROTO 0x6
745 #define PKTLAB_RAW_PROTO 0x00
746 #define PKTLAB_TCP_PROTO 0x06
747 #define PKTLAB_UDP_PROTO 0x11
759 #define PKTLAB_NCTL_TCP_FIN 0x1
784 #define PKTLAB_TCPEV_ESTABLISHED 0x0
785 #define PKTLAB_TCPEV_RESET 0x1
786 #define PKTLAB_TCPEV_TIMEOUT 0x2
787 #define PKTLAB_TCPEV_PEERCLOSED 0x3
788 #define PKTLAB_TCPEV_UNKNOWN 0xFF
800 PKTLAB_UNDEF_MESSAGE = 0x00,
803 PKTLAB_CDATA_MESSAGE = 0x20,
804 PKTLAB_START_MESSAGE = 0x21,
805 PKTLAB_END_MESSAGE = 0x22,
806 PKTLAB_YIELD_MESSAGE = 0X23,
807 PKTLAB_CONT_MESSAGE = 0X24,
809 PKTLAB_MREAD_MESSAGE = 0x28,
810 PKTLAB_MWRITE_MESSAGE = 0x29,
811 PKTLAB_NOPEN_MESSAGE = 0x2A,
812 PKTLAB_NCLOSE_MESSAGE = 0x2B,
813 PKTLAB_NSEND_MESSAGE = 0x2C,
814 PKTLAB_NCAP_MESSAGE = 0x2D,
815 PKTLAB_NCTL_MESSAGE = 0x2E,
818 PKTLAB_XCERT_MESSAGE = 0x30,
819 PKTLAB_XPUB_MESSAGE = 0x31,
822 PKTLAB_XSUB_MESSAGE = 0x38,
825 PKTLAB_RESULT_MESSAGE = 0x40,
826 PKTLAB_MDATA_MESSAGE = 0x41,
829 PKTLAB_NTAG_MESSAGE = 0x60,
830 PKTLAB_NSTAT_MESSAGE = 0x61,
831 PKTLAB_NDATA_MESSAGE = 0x62,
832 PKTLAB_NDROP_MESSAGE = 0x63,
833 PKTLAB_NBLOCK_MESSAGE = 0x64,
835 PKTLAB_SUSPD_MESSAGE = 0x68,
836 PKTLAB_RESUMD_MESSAGE = 0x69,
838 PKTLAB_XNOTIFY_MESSAGE = 0x70,
841 PKTLAB_XREG_MESSAGE = 0x80,
858 PKTLAB_ECTLBADMSG = 0x10,
859 PKTLAB_ECTLNOTSUP = 0x11,
860 PKTLAB_ECTLMONREJ = 0x12,
861 PKTLAB_ECTLMONUKN = 0x13,
863 PKTLAB_ECRTBADHDAT = 0x20,
864 PKTLAB_ECRTNOHDAT = 0x21,
865 PKTLAB_ECRTBADFRM = 0x22,
866 PKTLAB_ECRTNOSPACE = 0x23,
867 PKTLAB_ECRTBADHINT = 0x24,
869 PKTLAB_ESYSNOBUFS = 0x30,
870 PKTLAB_ESYSNOPERM = 0x31,
871 PKTLAB_ESKTINUSE = 0x32,
872 PKTLAB_ESKTNOTOPEN = 0x33,
873 PKTLAB_ESKTNOPRFAM = 0x34,
874 PKTLAB_ESKTNOPROTO = 0x35,
875 PKTLAB_ESKTNOADDR = 0x36,
876 PKTLAB_ESKTNOMATCH = 0x37,
877 PKTLAB_ESKTBADFILT = 0x38,
878 PKTLAB_ESKTPKTDENY = 0x39,
879 PKTLAB_ESKTOPNDENY = 0x3A,
881 PKTLAB_ETCPNOPORT = 0x40,
882 PKTLAB_EPKTNOTSENT = 0x41,
883 PKTLAB_EUDPNOPORT = 0x42,
884 PKTLAB_EPKTTRUNC = 0x43,
885 PKTLAB_ENORES = 0x44,
887 PKTLAB_EMEMBADADR = 0x48,
889 PKTLAB_EPUBBADCHL = 0x50,
890 PKTLAB_EPUBBADCHN = 0x51,
891 PKTLAB_EPUBBADADDR = 0x52,
892 PKTLAB_EPUBBADPR = 0x53,
893 PKTLAB_EPUBBADXD = 0x54,
895 PKTLAB_ESUBBADCHL = 0x60,
896 PKTLAB_ESUBBADCHN = 0x61,
897 PKTLAB_ESUBBADDA = 0x62,
899 PKTLAB_EUNKFAULT = 0xFFFF
913 #define PKTLAB_CDATA_HINT_FILTER "filter"
914 #define PKTLAB_CDATA_HINT_MONITOR "monitor"
941 const void * hintptr;
942 const void * dataptr;
997 const void* laddrptr;
998 const void* lportptr;
999 const void* raddrptr;
1000 const void* rportptr;
1016 const void* raddrptr;
1018 const void* rportptr;
1030 const void * filter;
1062 const void* raddrptr;
1064 const void* rportptr;
1077 const void* raddrptr;
1079 const void* rportptr;
1091 uint32_t unitcnt, bytecnt;
1104 const void * derptr;
1109 const void * chlistptr;
1111 const void * eopkey;
1112 const void * xdescrptr;
1117 const void * chlistptr;
1119 const void * eopkey;
1120 const void * dattrptr;
1131 const void * channelptr;
1133 const void * xdescrptr;
1138 const void * snikeyptr;
1151 #define PKTLAB_HLEN 4
1168 const void * restrict ptr,
size_t len);
1174 #define PKTLAB_ENCODE_IOVCNT 5
1179 #define PKTLAB_ENCODE_BUFSZ (PKTLAB_HLEN+32) // note: ndrop msg is 27 bytes long
1195 void * restrict buf,
struct iovec * restrict iov);
1424 #define PKTLAB_PUBLICKEY_LEN 32
1431 #define PKTLAB_PRIVATEKEY_LEN 32
1438 #define PKTLAB_KEYID_LEN PKTLAB_SHA256_DIGEST_LEN
1445 #define PKTLAB_SIGNATURE_LEN PKTLAB_ED25519_SIG_LEN
1475 const char * pem, uint_fast32_t pemlen,
1490 const uint8_t * der, uint_fast32_t derlen,
1505 const uint8_t * bytes, uint_fast32_t len,
1524 void * buf, uint_fast32_t buflen);
1535 void * buf, uint_fast32_t buflen);
1566 const char * pem, uint_fast32_t pemlen,
1582 const uint8_t * der, uint_fast32_t derlen,
1597 const uint8_t * bytes, uint_fast32_t len,
1616 void * buf, uint_fast32_t buflen);
1635 PKTLAB_CERT_SUBCMD = 0,
1636 PKTLAB_CERT_PUBCMD = 1,
1637 PKTLAB_CERT_EXPPRIV = 2,
1638 PKTLAB_CERT_DELPRIV = 3,
1639 PKTLAB_CERT_AGENT = 4,
1640 PKTLAB_CERT_UNKNOWN = 127
1651 enum pktlab_del_type {
1652 PKTLAB_DEL_TYPE_EXPPRIV = 0x1,
1653 PKTLAB_DEL_TYPE_REPPRIV = 0x2,
1654 PKTLAB_DEL_TYPE_NOT_PRSENT = 0x0,
1669 #define PKTLAB_FILTER_DIGEST_LEN PKTLAB_SHA256_DIGEST_LEN
1670 #define PKTLAB_MONITOR_DIGEST_LEN PKTLAB_SHA256_DIGEST_LEN
1712 uint8_t ip_address[PKTLAB_ADDRLEN_MAX];
1713 uint8_t network_mask[PKTLAB_ADDRLEN_MAX];
1733 uint32_t serialno_len;
1743 int_fast32_t pathlen;
1757 uint32_t serialno_len;
1763 enum pktlab_del_type del_type;
1766 uint_fast32_t aux_info_count;
1769 uint8_t * monitor_digests;
1770 uint_fast32_t monitor_digests_count;
1771 uint64_t max_num_priority;
1772 bool max_num_priority_present;
1773 uint64_t max_socket_count;
1774 bool max_socket_count_present;
1775 uint64_t max_exp_period;
1776 bool max_exp_period_present;
1777 uint64_t max_send_byte;
1778 bool max_send_byte_present;
1779 uint64_t max_send_pkt;
1780 bool max_send_pkt_present;
1781 uint64_t max_recv_byte;
1782 bool max_recv_byte_present;
1783 uint64_t max_recv_pkt;
1784 bool max_recv_pkt_present;
1785 bool src_ip_spoofing;
1786 bool src_ip_spoofing_present;
1791 uint_fast32_t aux_limit_count;
1798 #define PKTLAB_EXT_CERT_INFO "1.2.3.1"
1799 #define PKTLAB_EXT_CERT_LIMIT "1.2.3.3"
1802 #define PKTLAB_CERTTYPE_STR_SUBCMD "subcmd"
1803 #define PKTLAB_CERTTYPE_STR_PUBCMD "pubcmd"
1804 #define PKTLAB_CERTTYPE_STR_EXPPRIV "exppriv"
1805 #define PKTLAB_CERTTYPE_STR_DELPRIV "delpriv"
1806 #define PKTLAB_CERTTYPE_STR_AGENT "agent"
1807 #define PKTLAB_CERTTYPE_STR_UNKNOWN "unknown"
1839 const char * pem, uint_fast32_t pemlen,
1853 const uint8_t * der, uint_fast32_t derlen,
1867 void ** der, uint_fast32_t * derlen);
1957 uint8_t * agent_pubkey);
2016 uint_fast32_t certnum,
2017 uint_fast32_t rootnum,
2018 uint_fast32_t * verified_certnum,
2019 uint_fast32_t * used_root_indx);
2031 PKTLAB_PARSE_CHAIN_SUCCESS = 0,
2032 PKTLAB_PARSE_CHAIN_INVAL = 1,
2033 PKTLAB_PARSE_CHAIN_BAD_CHAIN = 2,
2034 PKTLAB_PARSE_CHAIN_BAD_KEY = 3,
2035 PKTLAB_PARSE_CHAIN_UNKNOWN_FAULT = 127,
2054 uint_fast32_t certnum,
const uint8_t * endpoint_key,
2056 uint8_t ** subable_channels, uint_fast32_t * channelnum);
2074 uint_fast32_t certnum,
2075 const uint8_t * controller_key,
2078 uint8_t * subable_channel);
2091 static inline uint_fast8_t
pktlab_get8(
const void * ptr);
2092 static inline uint_fast16_t pktlab_get16b(
const void * ptr);
2093 static inline uint_fast16_t pktlab_get16l(
const void * ptr);
2094 static inline uint_fast32_t pktlab_get24b(
const void * ptr);
2095 static inline uint_fast32_t pktlab_get24l(
const void * ptr);
2096 static inline uint_fast32_t pktlab_get32b(
const void * ptr);
2097 static inline uint_fast32_t pktlab_get32l(
const void * ptr);
2098 static inline uint_fast64_t pktlab_get64b(
const void * ptr);
2099 static inline uint_fast64_t pktlab_get64l(
const void * ptr);
2101 #define pktlab_get16n pktlab_get16b
2102 #define pktlab_get24n pktlab_get24b
2103 #define pktlab_get32n pktlab_get32b
2104 #define pktlab_get64n pktlab_get64b
2113 static inline void pktlab_set8(
void * ptr, uint_fast8_t val);
2114 static inline void pktlab_set16b(
void * ptr, uint_fast16_t val);
2115 static inline void pktlab_set16l(
void * ptr, uint_fast16_t val);
2116 static inline void pktlab_set24b(
void * ptr, uint_fast32_t val);
2117 static inline void pktlab_set24l(
void * ptr, uint_fast32_t val);
2118 static inline void pktlab_set32b(
void * ptr, uint_fast32_t val);
2119 static inline void pktlab_set32l(
void * ptr, uint_fast32_t val);
2120 static inline void pktlab_set64b(
void * ptr, uint_fast64_t val);
2121 static inline void pktlab_set64l(
void * ptr, uint_fast64_t val);
2123 #define pktlab_set16n pktlab_set16b
2124 #define pktlab_set24n pktlab_set24b
2125 #define pktlab_set32n pktlab_set32b
2126 #define pktlab_set64n pktlab_set64b
2140 static inline uint_fast32_t pktlab_hton32(uint_fast32_t x);
2141 static inline uint_fast64_t pktlab_hton64(uint_fast64_t x);
2142 static inline uint_fast16_t pktlab_ntoh16(uint_fast16_t x);
2143 static inline uint_fast32_t pktlab_ntoh32(uint_fast32_t x);
2144 static inline uint_fast64_t pktlab_ntoh64(uint_fast64_t x);
2159 static inline bool pktlab_getbit8(uint_fast8_t bits, uint_fast8_t pos);
2160 static inline bool pktlab_getbit16(uint_fast16_t bits, uint_fast8_t pos);
2161 static inline bool pktlab_getbit32(uint_fast32_t bits, uint_fast8_t pos);
2162 static inline bool pktlab_getbit64(uint_fast64_t bits, uint_fast8_t pos);
2173 static inline uint_fast8_t
pktlab_setbit8(uint_fast8_t bits, uint_fast8_t pos);
2174 static inline uint_fast16_t pktlab_setbit16(uint_fast16_t bits, uint_fast8_t pos);
2175 static inline uint_fast32_t pktlab_setbit32(uint_fast32_t bits, uint_fast8_t pos);
2176 static inline uint_fast64_t pktlab_setbit64(uint_fast64_t bits, uint_fast8_t pos);
2187 static inline uint_fast8_t
pktlab_clrbit8(uint_fast8_t bits, uint_fast8_t pos);
2188 static inline uint_fast16_t pktlab_clrbit16(uint_fast16_t bits, uint_fast8_t pos);
2189 static inline uint_fast32_t pktlab_clrbit32(uint_fast32_t bits, uint_fast8_t pos);
2190 static inline uint_fast64_t pktlab_clrbit64(uint_fast64_t bits, uint_fast8_t pos);
2197 return (uint64_t) sec * PKTLAB_TICKS_PER_SECOND;
2201 return (uint64_t) tv->tv_sec * PKTLAB_TICKS_PER_SECOND
2202 + (uint64_t) tv->tv_usec * PKTLAB_TICKS_PER_SECOND / 1000000;
2206 return (uint64_t) tp->tv_sec * PKTLAB_TICKS_PER_SECOND + (uint64_t) tp->tv_nsec;
2212 const uint64_t t_us = t / (PKTLAB_TICKS_PER_SECOND / 1000000);
2213 tv->tv_sec = t_us / 1000000;
2214 tv->tv_usec = t_us % 1000000;
2220 tp->tv_sec = t / PKTLAB_TICKS_PER_SECOND;
2221 tp->tv_nsec = t % PKTLAB_TICKS_PER_SECOND;
2225 return t / PKTLAB_TICKS_PER_SECOND;
2229 return *(
const uint8_t*)ptr;
2232 static inline uint_fast16_t pktlab_get16b(
const void * ptr) {
2233 const uint8_t * u8ptr = ptr;
2236 val = (uint_fast16_t) u8ptr[0] << 8;
2241 static inline uint_fast16_t pktlab_get16l(
const void * ptr) {
2242 const uint8_t * u8ptr = ptr;
2245 val = (uint_fast16_t) u8ptr[1] << 8;
2250 static inline uint_fast32_t pktlab_get24b(
const void * ptr) {
2251 const uint8_t * u8ptr = ptr;
2254 val = (uint_fast32_t) u8ptr[0] << 16;
2255 val |= (uint_fast16_t) u8ptr[1] << 8;
2260 static inline uint_fast32_t pktlab_get24l(
const void * ptr) {
2261 const uint8_t * u8ptr = ptr;
2264 val = (uint_fast32_t) u8ptr[2] << 16;
2265 val |= (uint_fast16_t) u8ptr[1] << 8;
2270 static inline uint_fast32_t pktlab_get32b(
const void * ptr) {
2273 val = (uint_fast32_t) pktlab_get16b(ptr) << 16;
2274 val |= pktlab_get16b(ptr+2);
2278 static inline uint_fast32_t pktlab_get32l(
const void * ptr) {
2281 val = (uint_fast32_t) pktlab_get16l(ptr+2) << 16;
2282 val |= pktlab_get16l(ptr);
2286 static inline uint_fast64_t pktlab_get64b(
const void * ptr) {
2289 val = (uint_fast64_t) pktlab_get32b(ptr) << 32;
2290 val |= pktlab_get32b(ptr+4);
2294 static inline uint_fast64_t pktlab_get64l(
const void * ptr) {
2297 val = (uint_fast64_t) pktlab_get32l(ptr+4) << 32;
2298 val |= pktlab_get32l(ptr);
2303 *(uint8_t*)ptr = val;
2306 static inline void pktlab_set16b(
void * ptr, uint_fast16_t val) {
2307 uint8_t * u8ptr = ptr;
2308 u8ptr[0] = val >> 8;
2309 u8ptr[1] = val >> 0;
2312 static inline void pktlab_set16l(
void * ptr, uint_fast16_t val) {
2313 uint8_t * u8ptr = ptr;
2314 u8ptr[1] = val >> 8;
2315 u8ptr[0] = val >> 0;
2318 static inline void pktlab_set24b(
void * ptr, uint_fast32_t val) {
2319 uint8_t * u8ptr = ptr;
2320 u8ptr[0] = val >> 16;
2321 u8ptr[1] = val >> 8;
2322 u8ptr[2] = val >> 0;
2325 static inline void pktlab_set24l(
void * ptr, uint_fast32_t val) {
2326 uint8_t * u8ptr = ptr;
2327 u8ptr[2] = val >> 16;
2328 u8ptr[1] = val >> 8;
2329 u8ptr[0] = val >> 0;
2332 static inline void pktlab_set32b(
void * ptr, uint_fast32_t val) {
2333 pktlab_set16b(ptr, val >> 16);
2334 pktlab_set16b(ptr+2, val);
2337 static inline void pktlab_set32l(
void * ptr, uint_fast32_t val) {
2338 pktlab_set16l(ptr+2, val >> 16);
2339 pktlab_set16l(ptr, val);
2342 static inline void pktlab_set64b(
void * ptr, uint_fast64_t val) {
2343 pktlab_set32b(ptr, val >> 32);
2344 pktlab_set32b(ptr+4, val);
2347 static inline void pktlab_set64l(
void * ptr, uint_fast64_t val) {
2348 pktlab_set32l(ptr+4, val >> 32);
2349 pktlab_set32l(ptr, val);
2356 static inline uint_fast32_t pktlab_hton32(uint_fast32_t x) {
2360 static inline uint_fast64_t pktlab_hton64(uint_fast64_t x) {
2361 uint_fast32_t hi, lo;
2364 lo = x & UINT32_C(0xffffffff);
2365 return ((uint_fast64_t) pktlab_hton32(lo) << 32) | pktlab_hton32(hi);
2368 static inline uint_fast16_t pktlab_ntoh16(uint_fast16_t x) {
2372 static inline uint_fast32_t pktlab_ntoh32(uint_fast32_t x) {
2376 static inline uint_fast64_t pktlab_ntoh64(uint_fast64_t x) {
2377 uint_fast32_t hi, lo;
2379 lo = pktlab_ntoh32(x >> 32);
2380 hi = pktlab_ntoh32(x & UINT32_C(0xffffffff));
2381 return ((uint_fast64_t) hi << 32) | lo;
2385 return pktlab_getbit64(bits, pos);
2388 static inline bool pktlab_getbit16(uint_fast16_t bits, uint_fast8_t pos) {
2389 return pktlab_getbit64(bits, pos);
2392 static inline bool pktlab_getbit32(uint_fast32_t bits, uint_fast8_t pos) {
2393 return pktlab_getbit64(bits, pos);
2396 static inline bool pktlab_getbit64(uint_fast64_t bits, uint_fast8_t pos) {
2397 return (pos >= 0x40) ? false : (bits & ((uint_fast64_t) 1 << pos));
2402 return pktlab_setbit64(bits, pos);
2405 static inline uint_fast16_t pktlab_setbit16(uint_fast16_t bits, uint_fast8_t pos) {
2406 return pktlab_setbit64(bits, pos);
2409 static inline uint_fast32_t pktlab_setbit32(uint_fast32_t bits, uint_fast8_t pos) {
2410 return pktlab_setbit64(bits, pos);
2413 static inline uint_fast64_t pktlab_setbit64(uint_fast64_t bits, uint_fast8_t pos) {
2414 return (pos >= 0x40) ? bits : (bits | ((uint_fast64_t) 1 << pos));
2419 return pktlab_clrbit64(bits, pos);
2422 static inline uint_fast16_t pktlab_clrbit16(uint_fast16_t bits, uint_fast8_t pos) {
2423 return pktlab_clrbit64(bits, pos);
2426 static inline uint_fast32_t pktlab_clrbit32(uint_fast32_t bits, uint_fast8_t pos) {
2427 return pktlab_clrbit64(bits, pos);
2430 static inline uint_fast64_t pktlab_clrbit64(uint_fast64_t bits, uint_fast8_t pos) {
2431 return (pos >= 0x40) ? bits : (bits & ~((uint_fast64_t) 1 << pos));