Fix issue #17996: expose socket.AF_LINK constant on BSD and OSX.
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index aa59f7f..edd196a 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -293,6 +293,11 @@
    TIPC related constants, matching the ones exported by the C socket API. See
    the TIPC documentation for more information.
 
+.. data:: AF_LINK
+
+  Availability: BSD, OSX.
+
+  .. versionadded:: 3.4
 
 .. data:: has_ipv6
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 2027e65..a025c70 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -99,6 +99,8 @@
 Library
 -------
 
+- Issue #17996: socket module now exposes AF_LINK constant on BSD and OSX.
+
 - Issue #17900: Allowed pickling of recursive OrderedDicts.  Decreased pickled
   size and pickling time.
 
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 20db3d9..fa75a10 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -5658,6 +5658,9 @@
     /* Alias to emulate 4.4BSD */
     PyModule_AddIntMacro(m, AF_ROUTE);
 #endif
+#ifdef AF_LINK
+    PyModule_AddIntMacro(m, AF_LINK);
+#endif
 #ifdef AF_ASH
     /* Ash */
     PyModule_AddIntMacro(m, AF_ASH);