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

Function pf_socket_lookup

freebsd/netpfil/pf/pf.c:3096–3174  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3094#endif /* INET6 */
3095
3096int
3097pf_socket_lookup(int direction, struct pf_pdesc *pd, struct mbuf *m)
3098{
3099 struct pf_addr *saddr, *daddr;
3100 u_int16_t sport, dport;
3101 struct inpcbinfo *pi;
3102 struct inpcb *inp;
3103
3104 pd->lookup.uid = UID_MAX;
3105 pd->lookup.gid = GID_MAX;
3106
3107 switch (pd->proto) {
3108 case IPPROTO_TCP:
3109 if (pd->hdr.tcp == NULL)
3110 return (-1);
3111 sport = pd->hdr.tcp->th_sport;
3112 dport = pd->hdr.tcp->th_dport;
3113 pi = &V_tcbinfo;
3114 break;
3115 case IPPROTO_UDP:
3116 if (pd->hdr.udp == NULL)
3117 return (-1);
3118 sport = pd->hdr.udp->uh_sport;
3119 dport = pd->hdr.udp->uh_dport;
3120 pi = &V_udbinfo;
3121 break;
3122 default:
3123 return (-1);
3124 }
3125 if (direction == PF_IN) {
3126 saddr = pd->src;
3127 daddr = pd->dst;
3128 } else {
3129 u_int16_t p;
3130
3131 p = sport;
3132 sport = dport;
3133 dport = p;
3134 saddr = pd->dst;
3135 daddr = pd->src;
3136 }
3137 switch (pd->af) {
3138#ifdef INET
3139 case AF_INET:
3140 inp = in_pcblookup_mbuf(pi, saddr->v4, sport, daddr->v4,
3141 dport, INPLOOKUP_RLOCKPCB, NULL, m);
3142 if (inp == NULL) {
3143 inp = in_pcblookup_mbuf(pi, saddr->v4, sport,
3144 daddr->v4, dport, INPLOOKUP_WILDCARD |
3145 INPLOOKUP_RLOCKPCB, NULL, m);
3146 if (inp == NULL)
3147 return (-1);
3148 }
3149 break;
3150#endif /* INET */
3151#ifdef INET6
3152 case AF_INET6:
3153 inp = in6_pcblookup_mbuf(pi, &saddr->v6, sport, &daddr->v6,

Callers 2

pflog_packetFunction · 0.85
pf_test_ruleFunction · 0.85

Calls 2

in_pcblookup_mbufFunction · 0.85
in6_pcblookup_mbufFunction · 0.85

Tested by

no test coverage detected