MCPcopy Create free account
hub / github.com/F-Stack/f-stack / linux2freebsd_cmsg

Function linux2freebsd_cmsg

lib/ff_syscall_wrapper.c:769–833  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

767}
768
769static inline int
770linux2freebsd_cmsg(const struct linux_msghdr *linux_msg, struct msghdr *freebsd_msg)
771{
772 struct cmsghdr *freebsd_cmsg = CMSG_FIRSTHDR(freebsd_msg);
773 struct linux_cmsghdr *linux_cmsg = LINUX_CMSG_FIRSTHDR(linux_msg);
774
775 while (freebsd_cmsg && linux_cmsg) {
776 unsigned char *freebsd_optval = CMSG_DATA(freebsd_cmsg);
777 unsigned char *linux_optval = LINUX_CMSG_DATA(linux_cmsg);
778
779 freebsd_cmsg->cmsg_type = linux_cmsg->cmsg_type;
780 freebsd_cmsg->cmsg_level = linux_cmsg->cmsg_level;
781 freebsd_cmsg->cmsg_len = CMSG_LEN(linux_cmsg->cmsg_len - CMSG_ALIGN(sizeof(struct linux_cmsghdr)));
782
783 switch (linux_cmsg->cmsg_level) {
784 case IPPROTO_IP:
785 switch (linux_cmsg->cmsg_type) {
786 case LINUX_IP_TOS:
787 freebsd_cmsg->cmsg_type = IP_TOS;
788 freebsd_cmsg->cmsg_len = CMSG_LEN(sizeof(char));
789
790 if (linux_cmsg->cmsg_len == LINUX_CMSG_LEN(sizeof(int))) {
791 *freebsd_optval = *(int *)linux_optval;
792 } else if (linux_cmsg->cmsg_len == LINUX_CMSG_LEN(sizeof(char))) {
793 *freebsd_optval = *linux_optval;
794 }
795
796 break;
797 case LINUX_IP_TTL:
798 freebsd_cmsg->cmsg_type = IP_TTL;
799 freebsd_cmsg->cmsg_len = CMSG_LEN(sizeof(char));
800
801 *freebsd_optval = *(int *)linux_optval;
802
803 break;
804 /*case XXXX:
805 break;*/
806 default:
807 memcpy(freebsd_optval, linux_optval, linux_cmsg->cmsg_len - sizeof(struct linux_cmsghdr));
808 break;
809 }
810
811 break;
812 case IPPROTO_IPV6:
813 switch (linux_cmsg->cmsg_type) {
814 case LINUX_IPV6_PKTINFO:
815 freebsd_cmsg->cmsg_type = IPV6_PKTINFO;
816 *(struct in6_pktinfo *)freebsd_optval = *(struct in6_pktinfo *)linux_optval;
817 break;
818 default:
819 memcpy(freebsd_optval, linux_optval, linux_cmsg->cmsg_len - sizeof(struct linux_cmsghdr));
820 break;
821 }
822 break;
823 default:
824 memcpy(freebsd_optval, linux_optval, linux_cmsg->cmsg_len - sizeof(struct linux_cmsghdr));
825 break;
826 }

Callers 1

linux2freebsd_msghdrFunction · 0.85

Calls 1

memcpyFunction · 0.50

Tested by

no test coverage detected