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

Function ff_route_ctl

lib/ff_syscall_wrapper.c:1745–1822  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1743}
1744
1745int
1746ff_route_ctl(enum FF_ROUTE_CTL req, enum FF_ROUTE_FLAG flag,
1747 struct linux_sockaddr *dst, struct linux_sockaddr *gw,
1748 struct linux_sockaddr *netmask)
1749
1750{
1751 struct sockaddr_storage sa_gw, sa_dst, sa_nm;
1752 struct sockaddr *psa_gw, *psa_dst, *psa_nm;
1753 int rtreq, rtflag;
1754 int rc;
1755 struct rt_addrinfo info;
1756 struct rib_cmd_info rci;
1757
1758 switch (req) {
1759 case FF_ROUTE_ADD:
1760 rtreq = RTM_ADD;
1761 break;
1762 case FF_ROUTE_DEL:
1763 rtreq = RTM_DELETE;
1764 break;
1765 case FF_ROUTE_CHANGE:
1766 rtreq = RTM_CHANGE;
1767 break;
1768 default:
1769 rc = EINVAL;
1770 goto kern_fail;
1771 }
1772
1773 switch (flag) {
1774 case FF_RTF_HOST:
1775 rtflag = RTF_HOST;
1776 break;
1777 case FF_RTF_GATEWAY:
1778 rtflag = RTF_GATEWAY;
1779 break;
1780 default:
1781 rc = EINVAL;
1782 goto kern_fail;
1783 };
1784
1785 bzero((caddr_t)&info, sizeof(info));
1786 info.rti_flags = rtflag;
1787
1788 if (gw != NULL) {
1789 psa_gw = (struct sockaddr *)&sa_gw;
1790 linux2freebsd_sockaddr(gw, sizeof(*gw), psa_gw);
1791 info.rti_info[RTAX_GATEWAY] = psa_gw;
1792 } else {
1793 psa_gw = NULL;
1794 }
1795
1796 if (dst != NULL) {
1797 psa_dst = (struct sockaddr *)&sa_dst;
1798 linux2freebsd_sockaddr(dst, sizeof(*dst), psa_dst);
1799 info.rti_info[RTAX_DST] = psa_dst;
1800 } else {
1801 psa_dst = NULL;
1802 }

Callers

nothing calls this directly

Calls 4

bzeroFunction · 0.85
linux2freebsd_sockaddrFunction · 0.85
rib_actionFunction · 0.85
ff_os_errnoFunction · 0.85

Tested by

no test coverage detected