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

Function sysctl_drop

freebsd/netinet/tcp_subr.c:3065–3175  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3063}
3064
3065static int
3066sysctl_drop(SYSCTL_HANDLER_ARGS)
3067{
3068 /* addrs[0] is a foreign socket, addrs[1] is a local one. */
3069 struct sockaddr_storage addrs[2];
3070 struct inpcb *inp;
3071 struct tcpcb *tp;
3072 struct tcptw *tw;
3073 struct sockaddr_in *fin, *lin;
3074 struct epoch_tracker et;
3075#ifdef INET6
3076 struct sockaddr_in6 *fin6, *lin6;
3077#endif
3078 int error;
3079
3080 inp = NULL;
3081 fin = lin = NULL;
3082#ifdef INET6
3083 fin6 = lin6 = NULL;
3084#endif
3085 error = 0;
3086
3087 if (req->oldptr != NULL || req->oldlen != 0)
3088 return (EINVAL);
3089 if (req->newptr == NULL)
3090 return (EPERM);
3091 if (req->newlen < sizeof(addrs))
3092 return (ENOMEM);
3093 error = SYSCTL_IN(req, &addrs, sizeof(addrs));
3094 if (error)
3095 return (error);
3096
3097 switch (addrs[0].ss_family) {
3098#ifdef INET6
3099 case AF_INET6:
3100 fin6 = (struct sockaddr_in6 *)&addrs[0];
3101 lin6 = (struct sockaddr_in6 *)&addrs[1];
3102 if (fin6->sin6_len != sizeof(struct sockaddr_in6) ||
3103 lin6->sin6_len != sizeof(struct sockaddr_in6))
3104 return (EINVAL);
3105 if (IN6_IS_ADDR_V4MAPPED(&fin6->sin6_addr)) {
3106 if (!IN6_IS_ADDR_V4MAPPED(&lin6->sin6_addr))
3107 return (EINVAL);
3108 in6_sin6_2_sin_in_sock((struct sockaddr *)&addrs[0]);
3109 in6_sin6_2_sin_in_sock((struct sockaddr *)&addrs[1]);
3110 fin = (struct sockaddr_in *)&addrs[0];
3111 lin = (struct sockaddr_in *)&addrs[1];
3112 break;
3113 }
3114 error = sa6_embedscope(fin6, V_ip6_use_defzone);
3115 if (error)
3116 return (error);
3117 error = sa6_embedscope(lin6, V_ip6_use_defzone);
3118 if (error)
3119 return (error);
3120 break;
3121#endif
3122#ifdef INET

Callers

nothing calls this directly

Calls 6

in6_sin6_2_sin_in_sockFunction · 0.85
sa6_embedscopeFunction · 0.85
in6_pcblookupFunction · 0.85
in_pcblookupFunction · 0.85
tcp_twcloseFunction · 0.85
tcp_dropFunction · 0.85

Tested by

no test coverage detected