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

Function rtsock_msg_mbuf

freebsd/net/rtsock.c:1551–1628  ·  view source on GitHub ↗

* Writes information related to @rtinfo object to newly-allocated mbuf. * Assumes MCLBYTES is enough to construct any message. * Used for OS notifications of vaious events (if/ifa announces,etc) * * Returns allocated mbuf or NULL on failure. */

Source from the content-addressed store, hash-verified

1549 * Returns allocated mbuf or NULL on failure.
1550 */
1551static struct mbuf *
1552rtsock_msg_mbuf(int type, struct rt_addrinfo *rtinfo)
1553{
1554 struct sockaddr_storage ss;
1555 struct rt_msghdr *rtm;
1556 struct mbuf *m;
1557 int i;
1558 struct sockaddr *sa;
1559#ifdef INET6
1560 struct sockaddr_in6 *sin6;
1561#endif
1562 int len, dlen;
1563
1564 switch (type) {
1565 case RTM_DELADDR:
1566 case RTM_NEWADDR:
1567 len = sizeof(struct ifa_msghdr);
1568 break;
1569
1570 case RTM_DELMADDR:
1571 case RTM_NEWMADDR:
1572 len = sizeof(struct ifma_msghdr);
1573 break;
1574
1575 case RTM_IFINFO:
1576 len = sizeof(struct if_msghdr);
1577 break;
1578
1579 case RTM_IFANNOUNCE:
1580 case RTM_IEEE80211:
1581 len = sizeof(struct if_announcemsghdr);
1582 break;
1583
1584 default:
1585 len = sizeof(struct rt_msghdr);
1586 }
1587
1588 /* XXXGL: can we use MJUMPAGESIZE cluster here? */
1589 KASSERT(len <= MCLBYTES, ("%s: message too big", __func__));
1590 if (len > MHLEN)
1591 m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
1592 else
1593 m = m_gethdr(M_NOWAIT, MT_DATA);
1594 if (m == NULL)
1595 return (m);
1596
1597 m->m_pkthdr.len = m->m_len = len;
1598 rtm = mtod(m, struct rt_msghdr *);
1599 bzero((caddr_t)rtm, len);
1600 for (i = 0; i < RTAX_MAX; i++) {
1601 if ((sa = rtinfo->rti_info[i]) == NULL)
1602 continue;
1603 rtinfo->rti_addrs |= (1 << i);
1604
1605 dlen = SA_SIZE(sa);
1606 KASSERT(dlen <= sizeof(ss),
1607 ("%s: sockaddr size overflow", __func__));
1608 bzero(&ss, sizeof(ss));

Callers 6

rt_missmsg_fibFunction · 0.85
rt_ifmsgFunction · 0.85
rtsock_addrmsgFunction · 0.85
rtsock_routemsg_infoFunction · 0.85
rt_newmaddrmsgFunction · 0.85
rt_makeifannouncemsgFunction · 0.85

Calls 6

bzeroFunction · 0.85
sa6_recoverscopeFunction · 0.85
m_copybackFunction · 0.85
m_getclFunction · 0.50
m_gethdrFunction · 0.50
m_freemFunction · 0.50

Tested by

no test coverage detected