Provided by: manpages-pl_4.23.1-1_all bug

NAZWA

       ip - Implementacja protokołu IPv4 dla systemu Linux

SKŁADNIA

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/ip.h> /* nadzbiór poprzedniego */

       tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
       udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
       raw_socket = socket(AF_INET, SOCK_RAW, protocol);

OPIS

       Linux  implementuje  protokół  IPv4  opisany w RFC 791 i RFC 1122. ip zawiera drugi poziom
       implementacji adresowania grupowego (multicasting) zgodny z RFC 1112. Zawiera  też  router
       IP, włączając w to filtr pakietów.

       Interfejs  programistyczny  jest zgodny z gniazdami BSD. Więcej informacji na temat gniazd
       można znaleźć, przeglądając socket(7).

       Gniazdo IP jest tworzone za pomocą socket(2):

           socket(AF_INET, typ_gniazda, protokół);

       Prawidłowe typy gniazd obejmują SOCK_STREAM do otwarcia gniazda strumieniowego, SOCK_DGRAM
       do   otwarcia  gniazda  datagramowego  i  SOCK_RAW  do  otwarcia  gniazda  raw(7)  w  celu
       bezpośredniego dostępu do protokołu IP.

       protocol jest protokołem IP w nagłówku IP, który ma być otrzymany lub wysłany.  Prawidłowe
       wartości protocol to:

       •  0 i IPPROTO_TCP dla gniazd strumieniowych tcp(7);

       •  0 i IPPROTO_UDP dla gniazd datagramowych udp(7);

       •  IPPROTO_SCTP dla gniazd strumieniowych sctp(7); oraz

       •  IPPROTO_UDPLITE dla gniazd datagramowych udplite(7).

       W  przypadku  SOCK_RAW  można podać prawidłowe liczby przypisane w RFC 1700 protokołowi IP
       IANA.

       Kiedy proces chce odbierać nowe, nadchodzące pakiety lub  połączenia,  powinien  podłączyć
       gniazdo  do  adresu  lokalnego  interfejsu za pomocą funkcji bind(2). W takim przypadku do
       dowolnej lokalnej pary (adres, port)  można  podłączyć  tylko  jedno  gniazdo  IP.  Gdy  w
       wywołaniu  bind(2)  podana  jest  wartość  INADDR_ANY,  to  gniazdo  zostanie dowiązane do
       wszystkich lokalnych interfejsów sieciowych. Gdy do niedowiązanego gniazda wywoływane jest
       listen(2),  to gniazdo zostanie automatycznie dowiązane do losowo wybranego wolnego portu,
       przy czym adres lokalny zostanie ustawiony na INADDR_ANY. Gdy dla  niedowiązanego  gniazda
       zostanie  wywołane  connect(2),  gniazdo  to  zostanie  automatycznie  dowiązane do losowo
       wybranego wolnego portu lub do  używalnego  portu  dzielonego,  przy  czym  adres  lokalny
       zostanie ustawiony na INADDR_ANY.

       Przypisywanie  (często  w  literaturze: "nazywanie") lokalnego gniazda TCP jest niemożliwe
       przez pewien okres czasu po jego zamknięciu, chyba że zostanie dla tego gniazda  ustawiony
       atrybut  SO_REUSEADDR.  Należy  używać  tego  atrybutu  z rozwagą, gdyż czyni on TCP mniej
       niezawodnym.

   Format adresu
       Adres  gniazda  IP  jest  przedstawiony  za  pomocą  kombinacji  adresu  interfejsu  IP  i
       16-bitowego  numeru  portu.  Podstawowy  protokół  IP  nie  zawiera numerów portów, są one
       zaimplementowane w protokołach wyższej warstwy, takich jak udp(7)  i  tcp(7).  Dla  gniazd
       surowych sin_port jest ustawione na protokół IP.

           struct sockaddr_in {
               sa_family_t    sin_family; /* rodzina adresów: AF_INET */
               in_port_t      sin_port;   /* port - sieciowa kolejność bajtów */
               struct in_addr sin_addr;   /* adres internetowy */
           };

           /* adres internetowy */
           struct in_addr {
               uint32_t       s_addr;     /* adres - sieciowa kolejność bajtów */
           };

       sin_family  ma  zawsze wartość AF_INET. Jest to wymagane; w Linuksie 2.2 większość funkcji
       sieciowych zwraca EINVAL, jeśli brakuje tego  ustawienia.  sin_port  zawiera  numer  portu
       podany  w  sieciowej  kolejności bajtów. Numery portów niższe niż 1024 są nazywane portami
       uprzywilejowanymi (lub czasem portami zarezerwowanymi). Tylko procesy uprzywilejowane  (na
       Linuksie:  proces  z  przywilejem  CAP_NET_BIND_SERVICE  w  przestrzeni  nazw  użytkownika
       zarządzającą swoją sieciową przestrzenią nazw)  mogą  wywołać  bind(2)  dla  tego  rodzaju
       gniazd.  Należy  zauważyć,  że  surowy  protokół  IPv4 jako taki nie zawiera pojęcia portu
       (takie rozróżnienie jest dopiero w warstwie transportowej, a to  jest  warstwa  sieciowa).
       Numery portów występują dopiero w protokołach wyższej warstwy, takich jak tcp(7) i udp(7).

       sin_addr  to  adres  IP  komputera (maszyny). Pole s_addr struktury struct in_addr zawiera
       adres interfejsu maszyny w sieciowej kolejności bajtów. Polu in_addr należy albo przypisać
       jedną  z  wartości  INADDR_*  (np.  INADDR_LOOPBACK) za pomocą htonl(3), albo użyć funkcji
       bibliotecznych inet_aton(3), inet_addr(3), inet_makeaddr(3) do ustawienia  wartości,  albo
       ustawić bezpośrednio przez funkcję obsługi nazw (patrz też gethostbyname(3)).

       Adresy  IPv4  dzielimy  na  pojedyncze  (unicast),  rozgłoszeniowe  (broadcast)  i grupowe
       (multicast).  Adresy   pojedyncze   określają   pojedynczy   interfejs   maszyny,   adresy
       rozgłoszeniowe  określają  wszystkie  maszyny w obrębie jakiejś sieci (podsieci), a adresy
       grupowe wszystkie maszyny w  obrębie  jakiejś  grupy  odbiorców.  Datagramy  kierowane  do
       adresów  rozgłoszeniowych  trafiają do odbiorcy tylko wtedy, gdy jego gniazdo ma ustawiony
       atrybut rozgłoszenia SO_BROADCAST. Ten sam atrybut musi być też  ustawiony,  gdy  zachodzi
       potrzeba  wysłania  datagramów  rozgłoszenia. W obecnej implementacji gniazda połączeniowe
       mogą używać wyłącznie adresów pojedynczych.

       Należy zauważyć, że dla adresu i portu zawsze jest używana sieciowa  kolejność  bajtów.  W
       szczególności  oznacza  to,  że  trzeba używać funkcji htons(3) dla numeru przypisanego do
       portu. Wszystkie funkcje standardowej biblioteki manipulujące adresem/portem automatycznie
       przekształcają podaną wartość na jej sieciową reprezentację.

   Adresy specjalne i zarezerwowane
       Istnieje wiele adresów specjalnych:

       INADDR_LOOPBACK (127.0.0.1)
              zawsze odnosi się do komputera lokalnego za pośrednictwem urządzenia pętli zwrotnej
              (loopback);

       INADDR_ANY (0.0.0.0)
              oznacza każdy adres, do kojarzenia gniazd;

       INADDR_BROADCAST (255.255.255.255)
              ma w przypadku bind(2), ze względów historycznych, taki sam skutek jak  INADDR_ANY.
              Pakiet  zaadresowany  do  INADDR_BROADCAST  za  pośrednictwem  gniazda z ustawionym
              SO_BROADCAST będzie rozgłaszał do wszystkich stacji w segmencie sieci lokalnej, tak
              długo, jak połączenie ma możliwość rozgłaszania.

       Najwyższe numery adresów
       Najniższe numery adresów
              W  każdej  podsieci lokalnej, innej niż punkt do punktu, z połączeniem obsługującym
              rozgłaszanie, adres o najwyższym możliwym numerze (np.  adres  .255  w  podsieci  z
              maską  sieciową  255.255.255.0)  służy  jako  adres  rozgłoszeniowy.  Nie  można go
              użytecznie przypisać do indywidualnego interfejsu i można  go  zaadresować  jedynie
              gniazdem   z  ustawioną  opcją  SO_BROADCAST.  Standardy  internetowe  historycznie
              rezerwowały również adres o najniższym możliwym numerze (np. adres .0 w podsieci  z
              maską  sieciową 255.255.255.0) do rozgłaszania, choć nazywały go „przestarzałym” do
              tego celu (część źródeł odnosi się do niego również jako  do  „adresu  sieci”).  Od
              Linuksa  5.14  jest  on  traktowany  jako  standardowy  adres pojedynczy i może być
              przypisany do interfejsu.

       Standardy internetowe tradycyjnie rezerwowały również różne adresy do  określonych  celów,
       choć Linux części z nich nie traktuje już w specjalny sposób.

       [0.0.0.1, 0.255.255.255]
       [240.0.0.0, 255.255.255.254]
              Adresy  w tych zakresach (0/8 i 240/4) są zarezerwowane globalnie. Od Linuksa 5.3 i
              Linuksa  2.6.25  adresy,  odpowiednio,  0/8  i  240/4,  inne   niż   INADDR_ANY   i
              INADDR_BROADCAST   są   traktowane   jako   zwykłe   adresy   pojedyncze.   Systemy
              przestrzegające tradycyjnego zachowania mogą nie  współpracować  z  tymi  zakresami
              historycznie zarezerwowanych adresów.

       [127.0.0.1, 127.255.255.254]
              Adresy w tym zakresie (127/8) są traktowane jako adresy pętli zwrotnej, podobnie do
              standardowego adresu pętli zwrotnej INADDR_LOOPBACK (127.0.0.1);

       [224.0.0.0, 239.255.255.255]
              Adresy w tym zakresie (224/4) są przeznaczone do użycia grupowego (multicast).

   Opcje gniazda
       IP wspiera niektóre opcje specyficzne dla protokołu, które mogą być ustawione przy  użyciu
       setsockopt(2)  i  odczytane  z  pomocą  getsockopt(2).  Poziom  opcji  gniazda  dla  IP to
       IPPROTO_IP. Dla każdego ze znaczników logicznych wartość całkowita zero oznacza  fałsz,  a
       każda inna - prawdę.

       Gdy  poda  się nieprawidłową  opcję gniazda,  getsockopt(2)  i  setsockopt(2)  zwrócą błąd
       ENOPROTOOPT.

       IP_ADD_MEMBERSHIP (od Linuksa 1.2)
              Przyłącza grupę adresów. Argumentem jest struktura ip_mreqn .

                  struct ip_mreqn {
                      struct in_addr imr_multiaddr; /* grupowy adres IP */
                      struct in_addr imr_address;   /* adres IP interfejsu
                                                       lokalnego */
                      int            imr_ifindex;   /* indeks interfejsu */
                  };

              imr_multiaddr zawiera adres grupy, którą aplikacja chce  podłączyć  lub  rozłączyć.
              Musi  być  to poprawny adres grupowy (multicast; w przeciwnym wypadku setsockopt(2)
              zwróci błąd EINVAL). imr_address jest to adres lokalnego  interfejsu,  przez  który
              system  powinien  połączyć  grupę;  jeśli  jest  równy  INADDR_ANY,  to  odpowiedni
              interfejs jest wybierany przez system. imr_ifindex jest indeksem interfejsu,  który
              powinien  być podłączony/odłączony do obsługi grupy imr_multiaddr lub 0, by wskazać
              na dowolny interfejs.

              Struktura ip_mreqn jest dostępna tylko od wersji 2.2 Linuksa. Dla  kompatybilności,
              stara  struktura  ip_mreq  wciąż jest obsługiwana. Różni się wprawdzie od ip_mreqn,
              lecz tylko tym, że nie zawiera pola  imr_ifindex  (jądro  określa  którą  strukturę
              zastosowano na podstawie rozmiaru podanego w optlen).

              IP_ADD_MEMBERSHIP jest prawidłowe wyłącznie dla setsockopt(2).

       IP_ADD_SOURCE_MEMBERSHIP (od Linuksa 2.4.22 / Linuksa 2.5.68)
              Przyłącza  adres  grupowy  (multicast)  i  zezwala na otrzymywanie danych jedynie z
              podanego źródła. Argumentem jest struktura ip_mreq_source.

                  struct ip_mreq_source {
                      struct in_addr imr_multiaddr;  /* grupowy adres IP */
                      struct in_addr imr_interface;  /* adres IP interfejsu
                                                        lokalnego */
                      struct in_addr imr_sourceaddr; /* adres IP
                                                        grupowego źródła */
                  };

              Struktura  ip_mreq_source  jest   podobna   do   ip_mreqn   opisanej   pod   hasłem
              IP_ADD_MEMBERSHIP. Pole imr_multiaddr zawiera adres grupowy do którego aplikacja ma
              zamiar  dołączyć  lub  opuścić  go.  Pole  imr_interface  jest  adresem  interfejsu
              lokalnego   z   którego   system   powinien  dołączyć  do  adresu  grupowego.  Pole
              imr_sourceaddr zawiera adres źródłowy, z którego  aplikacja  ma  zamiar  otrzymywać
              dane.

              Opcja może być użyta kilkakrotnie aby otrzymywać dane z kilku źródeł.

       IP_BIND_ADDRESS_NO_PORT (od Linuksa 4.2)
              Informuje  jądro, aby nie rezerwować portu efemerycznego przy korzystaniu z bind(2)
              z numerem portu 0. Port będzie wybrany automatycznie później, w trakcie wykonywania
              connect(2),  w  sposób umożliwiający współdzielenie portu źródłowego tak długo, jak
              długo unikatowa jest czteroelementowa krotka.

       IP_BLOCK_SOURCE (od Linuksa 2.4.22 / 2.5.68)
              Kończy otrzymywanie danych grupowych z podanego źródła i  podanej  grupy.  Jest  to
              odpowiednie   jedynie   po   zapisaniu   się   do   adresu   grupowego   za  pomocą
              IP_ADD_MEMBERSHIP lub IP_ADD_SOURCE_MEMBERSHIP.

              Argumentem   jest   struktura   ip_mreq_source   opisana   w   części    dotyczącej
              IP_ADD_SOURCE_MEMBERSHIP.

       IP_DROP_MEMBERSHIP (od Linuksa 1.2)
              Odłącza  się  od  grupy  adresów.  Argumentem  jest  struktura ip_mreqn lub ip_mreq
              podobna do IP_ADD_MEMBERSHIP.

       IP_DROP_SOURCE_MEMBERSHIP (od Linuksa 2.4.22 / 2.5.68)
              Odłącza się od grupy z podanego źródła — zaprzestaje otrzymywania danych z  podanej
              grupy  adresów  pochodzącej z podanego źródła. Jeśli programy zostały przypisane do
              wielu źródeł z tej samej grupy, dane z pozostałych źródeł wciąż  będą  dostarczane.
              Aby  zatrzymać  otrzymywanie  danych  ze  wszystkich  źródeł  na  raz,  należy użyć
              IP_DROP_MEMBERSHIP.

              Argumentem   jest   struktura   ip_mreq_source   opisana   w   części    dotyczącej
              IP_ADD_SOURCE_MEMBERSHIP.

       IP_FREEBIND (od Linuksa 2.4)
              Jeśli  jest  włączona,  to  ta  opcja  logiczna  pozwala  na  przypisanie do adresu
              nielokalnego  lub  (jeszcze)  nieistniejącego.  Pozwala  to  na  nasłuchiwanie   na
              gnieździe  bez  wymagania,  żeby   interfejs  sieciowy  niższej  warstwy lub podany
              dynamiczny  adres  IP  były  ustawione  podczas  próby  przypisania  gniazda  przez
              aplikację.  Ta  opcja  jest  odpowiednikiem  - dla pojedynczego gniazda - opisanego
              poniżej interfejsu /proc ip_nonlocal_bind.

       IP_HDRINCL (od Linuksa 2.0)
              Jeśli włączone, to dopuszczalne jest tworzenie przez użytkownika własnego  nagłówka
              IP  przed  danymi użytkownika. Działa to jedynie dla gniazd SOCK_RAW, patrz raw(7),
              by uzyskać więcej informacji. Gdy ten znacznik jest włączony, to wartości ustawiane
              przez IP_OPTIONS, IP_TTL i IP_TOS są ignorowane.

       IP_LOCAL_PORT_RANGE (od Linuksa 6.3)
              Ustawia  lub  pobiera  domyślny  przedział  lokalnych portów przypisany do gniazda.
              Opcji tej można  użyć  do  zawężenia  dla  danego  gniazda,  globalnego  przedziału
              lokalnych  portów,  zdefiniowanego w interfejsie /proc ip_local_port_range opisanym
              poniżej.

              Opcja przyjmuje wartość uint32_t, gdzie wysokie  16  bitów  ustawia  górną  granicę
              przedziału   (włącznie),  a  niskie  16  bitów  ustawia  dolną  granicę  przedziału
              (włącznie). Wartości 16-bitowe powinny przestrzegać kolejności bajtów komputera.

              Dolna granica przedziału musi być mniejsza od górnej granicy  przedziału,  a  żadna
              nie  może wynosić zero. Przy naruszeniu tych warunków, ustawienie opcji zawiedzie z
              błędem EINVAL.

              Jeśli któraś z granic jest poza globalnym przedziałem portów lokalnych  lub  wynosi
              zero, to przedział nie ma zastosowania.

              Aby zresetować ustawienie, należy podać zero jako zarówno górną jak i dolną granicę
              przedziału.

       IP_MSFILTER (od Linuksa 2.4.22 / 2.5.68)
              Opcja  pozwala  na  uzyskanie  dostępu  do  zaawansowanego  interfejsu  filtrowania
              pełnostanowego. Argumentem jest struktura ip_msfilter.

                  struct ip_msfilter {
                      struct in_addr imsf_multiaddr; /* grupowy adres IP
                      struct in_addr imsf_interface; /* adres IP interfejsu
                                                        lokalnego */
                      uint32_t       imsf_fmode;     /* Tryb filtrowania */

                      uint32_t       imsf_numsrc;    /* Liczba źródeł
                                                        w poniższej tablicy */
                      struct in_addr imsf_slist[1];  /* Tablica źródeł
                                                        adresów */
                  };

              Do  określenia  trybu  filtrowania służą dwa makra - MCAST_INCLUDE i MCAST_EXCLUDE.
              Makro  IP_MSFILTER_SIZE(n)  służy  natomiast  do   określenia   wielkości   pamięci
              potrzebnej do przechowania struktury ip_msfilter z n źródeł w liście źródeł.

              Pełny opis filtrowania źródeł adresów zawiera dokument RFC 3376.

       IP_MTU (od Linuksa 2.2)
              Pobiera bieżącą wartość MTU ścieżki obecnego gniazda. Zwraca liczbę całkowitą.

              IP_MTU  jest  poprawne tylko do getsockopt(2) i można go użyć wyłącznie gdy gniazdo
              zostało połączone.

       IP_MTU_DISCOVER (od Linuksa 2.2)
              Ustawia lub pobiera opcję  badania  MTU  ścieżki  (ang.  Path  MTU  Discovery)  dla
              gniazda.  Gdy  opcja  ta  jest  włączona, to Linux będzie przeprowadzał badanie MTU
              ścieżki dla gniazd SOCK_STREAM zgodnie z definicją zawartą w RFC 1191. W  przypadku
              gniazd  nie  będących  gniazdami  SOCK_STREAM, IP_PMTUDISC_DO wymusza ustawienie we
              wszystkich pakietach wychodzących znacznika zakazu fragmentacji. Za poprawne zgodne
              z  wartością  MTU,  podzielenie na pakiety i za wykonanie ewentualnych retransmisji
              jest odpowiedzialny program użytkownika.  Jądro odrzuci (z błędem EMSGSIZE) pakiety
              większe  niż  znane  MTU  ścieżki.  Ustawienie znacznika IP_PMTUDISC_WANT spowoduje
              sfragmentowanie datagramu, jeśli MTU ścieżki  tego  wymaga,  albo  -  w  przeciwnym
              wypadku - ustawienie znacznika zakazującego fragmentacji.

              Domyślną   dla   systemu   wartość   można  ustawić  na   IP_PMTUDISC_WANT  lub  na
              IP_PMTUDISC_DONT, wpisując odpowiednio - zero lub  wartość  niezerową  -  do  pliku
              /proc/sys/net/ipv4/ip_no_pmtu_disc.

              Wart. badan. MTU ścieżki   Znaczenie
              IP_PMTUDISC_WANT           Używaj ustawień zależnych od trasy.
              IP_PMTUDISC_DONT           Nie badaj MTU ścieżki.
              IP_PMTUDISC_DO             Zawsze badaj MTU ścieżki.
              IP_PMTUDISC_PROBE          Ustawia bit DF, ale ignoruje MTU ścieżki.

              Gdy  włączone  jest  badanie MTU ścieżki, jądro automatycznie namierza wartości MTU
              ścieżki dla każdego komputera docelowego.  Gdy  aktywne  jest  połączenie  z  danym
              komputerem,  można  wygodnie  odczytać  aktualnie rozpoznaną wartość MTU ścieżki za
              pomocą  connect(2)  używając  opcji  gniazda  IP_MTU  (np.  po  wystąpieniu   błędu
              EMSGSIZE).   Wartość   MTU   ścieżki   może  się  zmieniać  z  czasem.  Dla  gniazd
              bezpołączeniowych z wieloma komputerami docelowymi MTU dla danego, również  nowego,
              komputera docelowego można uzyskać za pomocą kolejki błędów (zobacz IP_RECVERR). Po
              nadejściu każdej aktualizacji MTU zostanie skolejkowany nowy błąd.

              W trakcie rozpoznawania MTU, pakiety inicjujące z gniazd datagramowych mogą  zostać
              porzucone.  Programy  korzystające  z UDP powinny być tego świadome i nie brać tego
              pod uwagę w swojej strategii retransmisji pakietów.

              Aby zainicjować  proces  badania  MTU  ścieżki  dla  gniazd  niepołączonych,  można
              rozpocząć  z  dużym  rozmiarem  datagramu  (nagłówek o długości do 64 kilobajtów) i
              pozwolić na jego zmniejszenie w wyniku aktualizacji MTU ścieżki.

              Aby oszacować inicjalne MTU ścieżki, należy podłączyć gniazdo datagramowe do adresu
              docelowego za pomocą connect(2) i pobrać MTU, wołając getsockopt(2) z opcją IP_MTU.

              Poprzez  ustawienie  wartości  w  IP_PMTUDISC_PROBE  (dostępnej  od Linuksa 2.6.22)
              możliwe jest zaimplementowanie opisanego w  RFC 4821  próbkowania  MTU  dla  gniazd
              SOCK_DGRAM   lub   SOCK_RAW.   Jest   to   szczególnie   użyteczne   w  narzędziach
              diagnostycznych typu tracepath(8), które w sposób zamierzony chcą  wysyłać  pakiety
              testowe większe niż zaobserwowane MTU ścieżki.

       IP_MULTICAST_ALL (od Linuksa 2.6.31)
              Tej  opcji  można  użyć  do  modyfikacji  zasad  dostarczania wiadomości grupowych.
              Argument wynosi 0 lub 1 (domyślnie 1). Gdy jest ustawiony na 1, to gniazdo  otrzyma
              wiadomości  ze  wszystkich  grup,  które  dołączono  globalnie  z całego systemu. W
              przeciwnym razie dostarczone będą tylko wiadomości z grup dołączonych  jawnie  (np.
              opcją IP_ADD_MEMBERSHIP) do tego konkretnego gniazda.

       IP_MULTICAST_IF (od Linuksa 1.2)
              Ustawia  lokalne urządzenie dla gniazda grupowego. Argumentem do setsockopt(2) jest
              ip_mreqn lub (od Linuksa 3.5) ip_mreq, struktura podobna do IP_ADD_MEMBERSHIP; albo
              struktura  in_addr  (jądro określa którą strukturę się podało na podstawie rozmiaru
              przekazanego w optlen). Do getsockopt(2) argumentem jest struktura in_addr.

       IP_MULTICAST_LOOP (od Linuksa 1.2)
              Ustawia lub pobiera logiczny argument typu całkowitego, określający, czy przesyłane
              pakiety grupowe powinny wracać do lokalnego gniazda.

       IP_MULTICAST_TTL (od Linuksa 1.2)
              Ustawia  lub  pobiera  wartość  czasu życia pakietu dla wychodzących z tego gniazda
              pakietów grupowych. Jest bardzo  istotne  w  przypadku  adresowania  grupowego,  by
              ustawić  najmniejszą  możliwą  wartość  TTL.  Domyślnie  jest  to 1, co oznacza, że
              pakiety grupowe  nie  opuszczają  sieci  lokalnej,  chyba  że  program  użytkownika
              wyraźnie tego żąda. Argument jest liczbą całkowitą.

       IP_NODEFRAG (od Linuksa 2.6.36)
              Jeśli  włączone  (argument  jest  niezerowy),  łączenie pakietów wychodzących przez
              warstwę netfilter jest wyłączone. Argumentem jest liczba całkowita.

              Ta opcja jest prawidłowa tylko dla gniazd SOCK_RAW.

       IP_OPTIONS (od Linuksa 2.0)
              Ustawia lub pobiera opcje IP, które  będą  wysyłane  z  każdym  pakietem  z  danego
              gniazda.  Argumenty  są  wskaźnikiem  do  bufora  pamięci zawierającego opcje i ich
              długości. setsockopt(2) ustawia opcje IP skojarzone z gniazdem. Maksymalny  rozmiar
              opcji  dla  IPv4  to 40 bajtów. Zobacz RFC 791, by poznać możliwe opcje. Gdy pakiet
              wstępnego potwierdzenia połączenia (ACK) dla gniazda typu SOCK_STREAM zawiera opcje
              IP,  to  opcje  wychodzącego  pakietu  IP  będą  automatycznie  pobrane  z opcji IP
              pobranego pakietu z odwróconymi nagłówkami  mówiącymi  o  trasie.  Po  ustanowieniu
              połączenia   przychodzące  pakiety  nie  są  uprawnione  do  zmiany  swoich  opcji.
              Przetwarzanie wszystkich przychodzących opcji źródła jest domyślnie wyłączone,  ale
              można  je  włączyć  ustawiając accept_source_route w interfejsie /proc. W przypadku
              gniazd  datagramowych  opcje  IP  mogą  być  ustawione  jedynie  przez  użytkownika
              lokalnego.  Funkcja  getsockopt(2)  z  argumentem IP_OPTIONS zwróci obecnie wysłane
              opcje przez umieszczenie ich w dostarczonym buforze.

       IP_PASSSEC (od Linuksa 2.6.17)
              Jeśli na stacjach wysyłających i przyjmujących  skonfigurowano  etykietowany  IPSEC
              lub   NetLabel,  opcja  ta  włącza  kontekst  bezpieczeństwa  drugiego  gniazda,  w
              komunikacie pomocniczym typu SCM_SECURITY, odbieranym za pomocą  recvmsg(2).  Opcja
              jest  wspierana  tylko  dla  gniazd  UDP;  w  przypadku  gniazd TCP lub SCTP proszę
              przeczytać opis opcji SO_PEERSEC poniżej.

              Podana  wartość  jest  argumentem  do  setsockopt(2),   a   zwracana   jako   wynik
              getsockopt(2) jest flaga logiczna będąca liczbą całkowitą.

              Kontekst bezpieczeństwa zwrócony przez komunikat pomocniczy SCM_SECURITY ma ten sam
              format, jak opisany przy opcji SO_PEERSEC poniżej.

              Uwaga: ponowne użycie typu komunikatu SCM_SECURITY  dla  opcji  gniazda  IP_PASSSEC
              było  prawdopodobnie  pomyłką,  jako że pozostałe komunikaty kontrolne IP mają swój
              schemat numeracji w przestrzeni nazw IP i często  używają  wartości  opcji  gniazda
              jako typu komunikatu. Obecnie nie występuje konflikt, ponieważ opcją IP z taką samą
              wartością jak SCM_SECURITY jest IP_HDRINCL, a ona nigdy nie jest  używana  do  typu
              komunikatów kontrolnych.

       IP_PKTINFO (od Linuksa 2.2)
              Przekazuje   pomocniczy   komunikat   IP_PKTINFO   zawierający   strukturę  pktinfo
              dostarczającą trochę informacji o przychodzącym pakiecie.  Działa  to  jedynie  dla
              gniazd  datagramowych.  Argument  jest  znacznikiem  mówiącym  gniazdu,  czy należy
              przekazać  komunikat  IP_PKTINFO,  czy  też  nie.   Sam   komunikat   może   zostać
              przesłany/otrzymany  wraz  z  pakietem  jedynie  jako komunikat sterujący za pomocą
              recvmsg(2) lub sendmsg(2).

                  struct in_pktinfo {
                      unsigned int   ipi_ifindex;  /* Indeks interfejsu */
                      struct in_addr ipi_spec_dst; /* Adres lokalny */
                      struct in_addr ipi_addr;     /* Nagłówek adresu
                                                      docelowego */
                  };

              ipi_ifindex  jest  unikatowym  indeksem  interfejsu,  przez  który  pakiet   został
              odebrany. Adres ipi_spec_dst jest lokalnym adresem pakietu, a ipi_addr jest adresem
              docelowym wynikającym z nagłówka  pakietu.  Jeśli  IP_PKTINFO  jest  przekazane  do
              sendmsg(2),  a  ipi_spec_dst  ma wartość niezerową, to zostanie użyte jako źródłowy
              adres lokalny podczas przeszukiwania tablicy  trasowania  i  dla  ustawienia  opcji
              trasowania  według  adresu  źródłowego.  Gdy  ipi_ifindex  ma wartość niezerową, to
              podstawowy  adres  lokalny  interfejsu  wskazywanego  przez  ten  indeks  nadpisuje
              ipi_spec_dst podczas przeszukiwania tablicy trasowania.

              Nieobsługiwane w przypadku gniazd SOCK_STREAM.

       IP_RECVERR (od Linuksa 2.2)
              Włącza  przekazywanie  dodatkowych  komunikatów o błędach, zwiększając niezawodność
              połączenia. Gdy jest to ustawione w gnieździe datagramowym, to wszystkie generowane
              błędy  będą  zapamiętane  w  specjalnej  kolejce błędów przypisanej do gniazda. Gdy
              użytkownik (proces użytkownika) otrzyma błąd (przez zwrócony kod błędu operacji  na
              gnieździe),   to   może  go  odebrać,  używając  funkcji  recvmsg(2)  z  ustawionym
              znacznikiem  MSG_ERRQUEUE.  Struktura  opisująca  błąd  sock_extended_err  zostanie
              przekazana w pomocniczym komunikacie o typie IP_RECVERR i poziomie IPPROTO_IP. Jest
              to niezwykle pomocne przy niezawodnym przechwytywaniu błędów niepołączonych gniazd.
              Odbierana z kolejki błędów porcja danych zawiera pakiet z informacją o błędzie.

              Komunikat  sterujący  IP_RECVERR  zawiera  strukturę sock_extended_err zdefiniowaną
              następująco:

                  #define SO_EE_ORIGIN_NONE    0
                  #define SO_EE_ORIGIN_LOCAL   1
                  #define SO_EE_ORIGIN_ICMP    2
                  #define SO_EE_ORIGIN_ICMP6   3

                  struct sock_extended_err {
                      uint32_t ee_errno;   /* numer błędu */
                      uint8_t  ee_origin;  /* źródło błędu */
                      uint8_t  ee_type;    /* typ */
                      uint8_t  ee_code;    /* kod */
                      uint8_t  ee_pad;
                      uint32_t ee_info;    /* informacje dodatkowe */
                      uint32_t ee_data;    /* inne dane */
                      /* Dalej mogą wystąpić dodatkowe dane */
                  };

                  struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno  zawiera  numer  errno  błędu  kolejki.  ee_origin  jest   kodem   miejsca
              pochodzenia  błędu.  Pozostałe  pola  są zależne od protokołu. Makro SO_EE_OFFENDER
              zwraca wskaźnik do adresu obiektu sieciowego, z którego pochodził  błąd  o  zadanym
              wskaźniku  do komunikatu pomocniczego. Gdy ten adres nie jest znany, pole sa_family
              struktury sockaddr  zawiera  wartość  AF_UNSPEC  a  pozostałe  pola  tej  struktury
              sockaddr są niezdefiniowane.

              IP  używa  struktury sock_extended_err w następujący sposób: ee_origin ustawione na
              SO_EE_ORIGIN_ICMP   dla   błędów   odbieranych   jako   pakiet   ICMP   albo    też
              SO_EE_ORIGIN_LOCAL  dla  błędów  generowanych  lokalnie.  Nieznane  wartości należy
              ignorować. ee_type i ee_code są ustawiane zgodnie z typem i kodem  pól  w  nagłówku
              ICMP. ee_info zawiera rozpoznaną wartość MTU dla błędów EMSGSIZE. Komunikat zawiera
              również sockaddr_in węzła, który spowodował błąd, a do którego można uzyskać dostęp
              za  pomocą  makra  SO_EE_OFFENDER. Pole sin_family adresu SO_EE_OFFENDER ma wartość
              AF_UNSPEC, gdy źródło błędu nie jest znane. Gdy błąd pochodzi  z  sieci,  wszystkie
              opcje  IP (IP_OPTIONS, IP_TTL itd.) włączone w gnieździe i zawarte w pakiecie błędu
              są przekazywane jako komunikaty kontrolne. Właściwe dane pakietu, który  spowodował
              błąd są zwracane jako normalne dane. Należy zauważyć, że TCP nie ma kolejki błędów;
              MSG_ERRQUEUE jest  nielegalne  w  przypadku  gniazd  SOCK_STREAM.  IP_RECVERR  jest
              poprawne  dla  TCP,  ale  wszystkie  błędy  są  przekazywane przez zwracaną wartość
              funkcji albo przez SO_ERROR.

              Dla gniazd surowych,  IP_RECVERR  włącza  przepuszczanie  do  aplikacji  wszystkich
              odebranych  komunikatów  ICMP  o błędach. W przeciwnym przypadku błędy są zgłaszane
              tylko dla gniazd połączonych.

              Ustawia lub  pobiera  znacznik  logiczny  zapisany  za  pomocą  liczby  całkowitej.
              IP_RECVERR jest domyślnie wyłączone.

       IP_RECVOPTS (od Linuksa 2.2)
              Przekazuje  użytkownikowi  wszystkie  nadchodzące opcje IP z komunikatu sterującego
              IP_OPTIONS.  Nagłówek  wyboru  trasy  i  inne  opcje  są  już  wstępnie  wypełnione
              informacjami   o   lokalnej   maszynie.  Nieobsługiwane  w  przypadku  gniazd  typu
              SOCK_STREAM.

       IP_RECVORIGDSTADDR (od Linuksa 2.6.29)
              Ta opcja logiczna włącza komunikat pomocniczy IP_ORIGDSTADDR w recvmsg(2), w którym
              jądro  zwraca  oryginalny  adres  docelowy  otrzymywanego  właśnie  datagramu.  Ten
              komunikat  pomocniczy  zawiera  strukturę  struct  sockaddr_in.  Nieobsługiwane   w
              przypadku gniazd SOCK_STREAM.

       IP_RECVTOS (od Linuksa 2.2)
              Jeśli  jest  ustawione,  to  pomocniczy komunikat IP_TOS jest przepuszczany razem z
              nadchodzącymi pakietami. Zawiera on bajt, który  określa  pole  zdefiniowane  także
              jako  bajt  znajdujące  się  w  nagłówku pakietu, a zwane Typ Usługi/Pierwszeństwa.
              Wymaga logicznego znacznika w postaci liczby całkowitej. Nieobsługiwane w przypadku
              gniazd SOCK_STREAM.

       IP_RECVTTL (od Linuksa 2.2)
              Gdy  ten  znacznik  jest ustawiony, przepuszczany jest komunikat pomocniczy IP_TTL,
              zawierający pole określane  mianem  „czas  życia”  odbieranego  pakietu  w  postaci
              32-bitowej  liczby.  Nie  jest  to wspierane w przypadku strumieniowych gniazd typu
              SOCK_STREAM.

       IP_RETOPTS (od Linuksa 2.2)
              Działanie identyczne do IP_RECVOPTS,  ale  zwraca  surowe,  nieprzetworzone  opcje,
              włącznie  z  rekordem opcji, mówiącym o znaczniku czasowym i trasie, niewypełnionym
              wartościami w tym przejściu pakietu. Nieobsługiwane w przypadku gniazd SOCK_STREAM.

       IP_ROUTER_ALERT (od Linuksa 2.2)
              Przekazuje  wszystkie  pakiety  z  opcją  alarmu  rutera  IP,  które  miałyby   być
              przekazywane  (ang.  forwarded)  do tego gniazda. Działa tylko dla gniazd surowych.
              Jest  to  przydatne  na  przykład  dla  demonów  RSVP  działających  w  przestrzeni
              użytkownika. Wykorzystane pakiety nie są przekazywane (ang. forwarded) przez jądro.
              Ponowne ich  wysłanie  należy  do  obowiązków  programu  użytkownika.  Dowiązywanie
              gniazda  jest  w  tym  przypadku  ignorowane,  pakiety  te są filtrowane jedynie na
              podstawie protokołu. Wymaga liczby całkowitej jako argumentu.

       IP_TOS (od Linuksa 1.0)
              Ustawia lub pobiera pole znacznika  Typ-Usługi  (ang.  Type-Of-Service,  w  skrócie
              TOS),  które  jest  przesyłane  z  każdym pakietem IP pochodzącym z danego gniazda.
              Służy do ustalenia priorytetów pakietów w sieci. TOS  jest  bajtem.  Oto  definicje
              niektórych  standardowych znaczników TOS: IPTOS_LOWDELAY - minimalizacja opóźnienia
              we wzajemnym ruchu, IPTOS_THROUGHPUT - optymalizacja wyjścia,  IPTOS_RELIABILITY  -
              optymalizacja  pod  kątem  niezawodności,  a IPTOS_MINCOST powinna być używana jako
              „dane wypełniające” tam, gdzie szybkość  transmisji  nie  ma  większego  znaczenia.
              Można  podać  najwyżej  jedną z powyższych wartości TOS. Inne bity są niepoprawne i
              powinny być wyzerowane. Linux domyślnie wysyła  najpierw  datagram  IPTOS_LOWDELAY,
              ale  dokładne  zachowanie zależy od konfiguracji właściwości szeregowania. Niektóre
              poziomy o wysokim priorytecie mogą wymagać  uprawnień  administratora  (ustawionego
              atrybutu CAP_NET_ADMIN).

       IP_TRANSPARENT (od Linuksa 2.6.24)
              Ustawienie  tej opcji logicznej włącza przezroczyste (ang. „transparent”) proxy dla
              tego gniazda. Ta opcja gniazda pozwala wywołującej aplikacji przypisanie gniazda do
              nielokalnego adresu IP i operowanie jako zarówno klient, jak i serwer z zewnętrznym
              adresem IP dla lokalnego punktu docelowego. UWAGA:  wymaga  to  takiego  ustawienia
              reguł  trasowania,  żeby pakiety wysyłane na ten adres zewnętrzny były przekazywane
              przez TProxy (tj. system na  którym  działa  aplikacja  korzysta  z  opcji  gniazda
              IP_TRANSPARENT).  Włączenie  tej  opcji  wymaga uprawnień administratora (przywilej
              CAP_NET_ADMIN).

              Przekierowanie TProxy używające celu TPROXY z iptables(8) także wymagają  włączenia
              tej opcji w przekierowywanym gnieździe.

       IP_TTL (od Linuksa 1.0)
              Ustawia  lub  pobiera  pole  „czas  życia”  (ang.  Time-To-Live, w skrócie TTL) dla
              każdego wychodzącego z danego gniazda pakietu IP.

       IP_UNBLOCK_SOURCE (od Linuksa 2.4.22 / 2.5.68)
              Odblokowuje zablokowaną uprzednio grupę adresów. Zwraca  EADDRNOTAVAIL  gdy  podane
              źródło nie było zablokowane.

              Argumentem    jest   struktura   ip_mreq_source   opisana   w   części   dotyczącej
              IP_ADD_SOURCE_MEMBERSHIP.

       SO_PEERSEC (od Linuksa 2.6.17)
              Jeśli na stacjach wysyłających i przyjmujących  skonfigurowano  etykietowany  IPSEC
              lub  NetLabel,  ta  opcja  gniazda  tylko do odczytu zwraca kontekst bezpieczeństwa
              drugiego gniazda połączonego z tym gniazdem. Domyślnie będzie to taka sama  wartość
              jak  wartość  kontekstu  procesu  tworzącego  drugie  gniazdo,  chyba  że  zostanie
              przesłoniona zasadami lub procesem z wymaganymi uprawnieniami.

              Argumentem do getsockopt(2) jest wskaźnik do bufora określonej długości w  bajtach,
              którego łańcuch kontekstu bezpieczeństwa ma zostać skopiowany. Jeśli długość bufora
              jest mniejsza niż  długość  łańcucha  kontekstu  bezpieczeństwa,  to  getsockopt(2)
              zwróci  -1,  ustawi  errno  na  ERANGE  i zwróci wymaganą długość za pomocą optlen.
              Wywołujący powinien początkowo przydzielić co najmniej NAME_MAX bajtów dla  bufora,
              choć  nie ma gwarancji, że będzie to wielkość wystarczająca. Może zajść konieczność
              dostosowania wielkości bufora do zwróconej długości i wykonanie drugiego podejścia.

              Łańcuch kontekstu bezpieczeństwa może  zawierać  kończący  znak  null  w  zwracanej
              długości,  ale  nie  jest  to  gwarantowane. Kontekst bezpieczeństwa "foo" może być
              reprezentowany jako {'f','o','o'} o długości 3 lub {'f','o','o','\0'} o długości 4,
              oba  te  warianty  są  uważane za równorzędne. Łańcuch jest drukowalny, nie zawiera
              znaków  null  innych  niż  kończące  łańcuch  oraz  ma  nieokreślone  kodowanie  (w
              szczególności, nie gwarantuje się kodowania ASCII lub UTF-8).

              Użycie tej opcji do gniazd w rodzinie adresowej AF_INET jest obsługiwane od Linuksa
              2.6.17 w przypadku gniazd TCP, a od Linuksa 4.17 w przypadku gniazd SCTP.

              W przypadku SELinuksa, NetLabel przenosi jedynie część MLS kontekstu bezpieczeństwa
              partnera  poprzez łącze, pozostała część kontekstu bezpieczeństwa uzyskuje wartości
              domyślne, zdefiniowane w początkowym identyfikatorze bezpieczeństwa  (SID)  netmsg.
              NetLabel   można   jednak  skonfigurować,  w  celu  przesyłania  pełnego  kontekstu
              bezpieczeństwa pętlą zwrotną. Etykietowany IPSEC zawsze przekazuje  pełny  kontekst
              bezpieczeństwa,  jako  część  ustanawiania powiązania bezpieczeństwa (ang. security
              association – SA) i sprawdza je w zależności od powiązania dla każdego pakietu.

   Interfejsy /proc
       Protokół IP obsługuje zbiór interfejsów /proc i korzysta z niech do ustawiania  niektórych
       parametrów  globalnych.  Parametry  są  dostępne  przez zapis lub odczyt plików z katalogu
       /proc/sys/net/ipv4/. Interfejsy opisane jako logiczne pobierają liczbę  całkowitą,  której
       wartość  niezerowa  („prawda”)  oznacza,  że  dana  opcja jest włączona, a zero („fałsz”),
       oznacza, że opcja jest wyłączona.

       ip_always_defrag (logiczna; od Linuksa 2.2.13)
              [Nowa w Linuksie 2.2.13; we wcześniejszych wersjach jądra funkcją tą sterowało  się
              w  czasie  kompilacji  za  pomocą opcji CONFIG_IP_ALWAYS_DEFRAG, która nie jest już
              obecna w Linuksie 2.4.x i kolejnych]

              Gdy ten znacznik logiczny  jest  włączony  (różny  od  0),  przychodzące  fragmenty
              (części  pakietów  IP, które się pojawiają, gdy pewien komputer pomiędzy komputerem
              źródłowym a docelowym zdecyduje, że pakiety były za duże i podzieli je na  kawałki)
              będą ponownie złożone (zdefragmentowane) przed ich przetworzeniem, nawet jeśli mają
              być przekazane dalej (and. forwarded).

              Należy włączać jedynie  przy  działającej  zaporze  sieciowej,  stanowiącej  główne
              wejście  do danej sieci lub działającym przezroczystym proxy; nigdy nie należy tego
              włączać na zwykłym routerze lub komputerze. W przeciwnym  przypadku  łączność  może
              zostać  zakłócona,  gdy  fragmenty  będą  podróżować innymi łączami. Defragmentacja
              powoduje również znaczne wykorzystanie pamięci i czasu procesora.

              Jest  to  włączane  automagicznie,   gdy   skonfigurowane   jest   maskowanie   lub
              przezroczyste proxy.

       ip_autoconfig (od Linuksa 2.2 do Linuksa 2.6.17)
              Nie udokumentowane.

       ip_default_ttl (liczba, domyślnie: 64; od Linuksa 2.2)
              Ustawia  domyślną  wartość „czasu życia” (ang. time-to-live) wychodzących pakietów.
              Może być ona zmieniona dla gniazda za pomocą opcji IP_TTL.

       ip_dynaddr (logiczna; domyślnie: wyłączona; od Linuksa 2.0.31)
              Włącza dynamiczne adresowanie gniazda oraz przepisywanie adresu dla maskowania przy
              zmianie  adresu  interfejsu.  Jest  to  bardzo  przydatne w przypadku korzystania z
              interfejsu sprzęgniętego z linią telefoniczną, którego adres IP może się  zmieniać.
              0  oznacza  brak  przepisywania,  1 włącza przepisywanie, a 2 włącza tryb rozwlekły
              (ang. verbose).

       ip_forward(logiczna; domyślnie: wyłączona; od Linuksa 1.2)
              Włącza przekazywanie (ang. forwarding) pakietów przy użyciu  logicznego  znacznika.
              Może być ustawione także na podstawie interfejsu.

       ip_local_port_range (od Linuksa 2.2)
              Plik  zawierający dwa liczby całkowite określające domyślny zakres lokalnych portów
              przypisanych do gniazd niebędących  bezpośrednio  przydzielonych  do  portu  —  tj.
              zakres   ten   jest   używany   do   portów  efemerycznych  (portów  przypisywanych
              dynamicznie).  Port  efemeryczny  jest  przydzielany  do  gniazda  w  następujących
              sytuacjach:

              •  numer  portu  w  adresie  gniazda  jest  określony  jako 0 w trakcie wywoływania
                 bind(2);

              •  listen(2) jest wywoływane na gnieździe strumieniowym, które nie  było  wcześniej
                 przydzielone;

              •  connect(2) była wywołana na gnieździe, które nie było wcześniej przydzielone;

              •  sendto(2)  jest  wywoływane  na gnieździe datagramowym, które nie było wcześniej
                 przydzielone.

              Przypisywanie  portów  efemerycznych  rozpoczyna  się  od   pierwszego   numeru   w
              ip_local_port_range  i  kończy  się  na  drugim numerze. Jeśli wyczerpie się zakres
              portów efemerycznych, to odpowiednie wywołanie systemowe zwróci  błąd  (ale  proszę
              sprawdzić rozdział USTERKI!).

              Proszę zauważyć, że zakres portów w ip_local_port_range nie powinien pokrywać się z
              zakresem  portów  wykorzystywanym  do  maskowania  (chociaż  taka   sytuacja   jest
              obsługiwana).  Dowolny  wybór może również powodować problemy z niektórymi zaporami
              sieciowymi, które robią pewne założenia  odnośnie  do  portów  używanych  lokalnie.
              Pierwsza liczba powinna być większa niż 1024, albo - co byłoby lepsze - większa niż
              4096, aby uniknąć konfliktów z dobrze znanymi portami i zminimalizować  problemy  z
              zaporami sieciowymi.

       ip_no_pmtu_disc (logiczna; domyślnie: wyłączona; od Linuksa 2.2)
              Jeśli  jest to włączone, to domyślnie nie będzie wykonywane badanie MTU ścieżki dla
              gniazd TCP. Badanie MTU może się nie sprawdzać  w  przypadku  źle  skonfigurowanych
              zapór  sieciowych  (odrzucających  wszelkie  pakiety ICMP) lub źle skonfigurowanych
              interfejsów (np. połączenie typu point-to-point, gdzie oba końce nie  zgadzają  się
              na  MTU).  Lepiej  poprawić  wszelkie  wadliwie skonfigurowane rutery po drodze niż
              całkowicie wyłączyć badanie  MTU  ścieżki,  ponieważ  niewykonywanie  tej  operacji
              pociąga za sobą duże straty w obrębie sieci.

       ip_nonlocal_bind (logiczna; domyślnie: wyłączona; od Linuksa 2.4)
              Jeżeli  ustawione,  pozwala  procesowi  na  wywołanie  funkcji bind() z nielokalnym
              adresem IP, co może być całkiem przydatne, ale może popsuć niektóre aplikacje.

       ip6frag_time (liczba; domyślnie: 30)
              Czas w sekundach przetrzymywania w pamięci fragmentu IPv6.

       ip6frag_secret_interval (liczba; domyślnie: 600)
              Interwał (w sekundach) odświeżania sekretnego klucza funkcji mieszającej (lub czasu
              życia tego klucza) dla fragmentów IPv6.

       ipfrag_high_thresh (liczba)
       ipfrag_low_thresh (liczba)
              Jeśli  liczba  zebranych  w  kolejce fragmentów IP osiągnie wartość określoną przez
              ipfrag_high_thresh,  wtedy  kolejka  jest  opróżniana  do   ilości   określonej   w
              ipfrag_low_thresh. Zawiera ona liczbę całkowitą z podaną liczbą bajtów.

       neigh/*
              Patrz arp(7).

   Kontrolki systemowe (ioctl)
       Do protokołu ip mają zastosowanie wszystkie kontrolki wejścia/wyjścia opisane w socket(7).

       Kontrolki konfigurowania ogólnych parametrów urządzenia są opisane w netdevice(7).

BŁĘDY

       EACCES Użytkownik  próbował  wykonać  operację,  nie  mając potrzebnych praw. Obejmuje to:
              wysyłanie pakietu na adres rozgłoszeniowy bez ustawionego  znacznika  SO_BROADCAST,
              wysyłanie  pakietu zakazaną drogą, próbę modyfikacji ustawień zapory sieciowej, nie
              mając  uprawnień  administratora  (ustawionego  przywileju  CAP_NET_ADMIN),   próbę
              przypisania   uprzywilejowanego   portu,   nie   mając   uprawnień   administratora
              (ustawionego przywileju CAP_NET_BIND_SERVICE).

       EADDRINUSE
              Próbowano przypisać port do adresu będącego już w użyciu.

       EADDRNOTAVAIL
              Zażądano nieistniejącego interfejsu lub żądany  adres  źródłowy  nie  jest  adresem
              lokalnym.

       EAGAIN Operacja na gnieździe z wyłączonym blokowaniem spowodowałaby zablokowanie.

       EALREADY
              Operacja łączenia na gnieździe nieblokującym już trwa.

       ECONNABORTED
              Połączenie zostało zamknięte podczas accept(2).

       EHOSTUNREACH
              Brak  wpisu  określającego  adres  docelowy  w tabeli trasowania. Błąd ten może być
              wywołany  przez  komunikat  ICMP  od  zdalnego  routera  lub  dla  lokalnej  tabeli
              trasowania.

       EINVAL Przypisano  niewłaściwy  argument.  W  przypadku  operacji  wysyłania  może  to być
              spowodowane przez wysyłanie drogą przypisaną do czarnej dziury.

       EISCONN
              connect(2) była wywołana na już połączonym gnieździe.

       EMSGSIZE
              Datagram jest większy niż wartość MTU po drodze do celu i nie może być podzielony.

       ENOBUFS
       ENOMEM Niewystarczająca ilość dostępnej  pamięci.  Często  oznacza  to,  że  przydzielanie
              pamięci   jest   ograniczone   przez  ograniczenia  bufora  gniazda,  a  nie  przez
              ograniczenia pamięci systemowej. Jednak nie jest to pewne na 100%.

       ENOENT SIOCGSTAMP było wywołane na gnieździe, do którego nie dotarł żaden pakiet.

       ENOPKG Podsystem jądra nie był konfigurowany.

       ENOPROTOOPT i EOPNOTSUPP
              Przypisano niewłaściwą opcję gniazda.

       ENOTCONN
              Operacja może być wykonana tylko na połączonym gnieździe,  a  gniazdo  nie  zostało
              połączone.

       EPERM  Użytkownik  nie ma praw do ustawiania wysokiego priorytetu, zmiany konfiguracji lub
              wysyłania sygnałów do żądanych procesów lub grup procesów.

       EPIPE  Połączenie zostało nieoczekiwanie zamknięte lub wyłączył się drugi koniec.

       ESOCKTNOSUPPORT
              Gniazdo nie jest skonfigurowane lub zażądano nieznanego typu gniazda.

       Inne błędy mogą być generowane przez protokoły wyższych warstw; obejrzyj  tcp(7),  raw(7),
       udp(7) i socket(7).

UWAGI

       IP_FREEBIND,   IP_MSFILTER,   IP_MTU,   IP_MTU_DISCOVER,  IP_RECVORIGDSTADDR,  IP_PASSSEC,
       IP_PKTINFO, IP_RECVERR, IP_ROUTER_ALERT, and IP_TRANSPARENT są typowo Linuksowe.

       Należy być bardzo ostrożnym przy stosowaniu opcji SO_BROADCAST - nie jest ona  w  systemie
       Linux  uprzywilejowana,  jest  więc  łatwo  przeciążyć  sieć  za  pomocą  niedbale użytych
       rozgłoszeń. W przypadku protokołów nowych aplikacji lepiej używać grupy adresowej  zamiast
       rozgłoszeń. Stosowanie adresów rozgłoszeniowych jest niezalecane. W RFC 6762 pokazany jest
       przykład protokołu (mDNS) korzystającego z nowocześniejszego podejścia  do  komunikacji  z
       otwartą grupą stacji w sieci lokalnej.

       Niektóre  inne  implementacje  gniazd  BSD  dopuszczają  dla  gniazd opcje IP_RCVDSTADDR i
       IP_RECVIF używane do pobierania adresu przeznaczenia i interfejsu odbieranych  datagramów.
       Linux udostępnia bardziej ogólną opcję IP_PKTINFO, robiącą to samo.

       Niektóre  implementacja  gniazd  BSD  także  udostępniają  opcję IP_RECVTTL, ale łącznie z
       przychodzącym pakietem jest przekazywany pomocniczy komunikat o typie  IP_RECVTTL.  W  tym
       właśnie różni się to od opcji IP_TTL, używanej w Linuksie.

       Używanie  poziomu  opcji  gniazd  SOL_IP  jest nieprzenośne; gniazda oparte na BSD używają
       poziomu IPPROTO_IP.

       INADDR_ANY  (0.0.0.0)  i  INADDR_BROADCAST  (255.255.255.255)  są  neutralne   pod   kątem
       kolejności bajtów. Oznacza to, że nie wpływa na nie htonl(3).

   Zgodność
       Dla   zgodności   z   Linuksem   2.0,   wciąż   jest  dopuszczalna  przestarzała  składnia
       socket(AF_INET, SOCK_PACKET, protokół), by stworzyć gniazdo typu packet(7).  Nie  jest  to
       zbyt  poprawne  i  powinno  być  zastępowane  przez socket(AF_PACKET, SOCK_RAW, protokół).
       Głównym powodem jest różnica w strukturze adresowej sockaddr_ll przechowującej  informacje
       dla  warstwy  łącza  (dokładniej:  warstwy  kanałowej),  które kiedyś przechowywane były w
       sockaddr_pkt.

USTERKI

       Jest zbyt wiele nieokreślonych wartości błędów.

       Błąd używany do zdiagnozowania wyczerpania się  zakresu  portów  efemerycznych  różni  się
       między poszczególnymi wywołaniami systemowymi (connect(2), bind(2), listen(2), sendto(2)),
       które przypisują porty efemeryczne.

       Nie są opisane kontrolki wejścia/wyjścia do  konfigurowania  specyficznych  dla  IP  opcji
       interfejsu i tabele ARP.

       Pobieranie  pierwotnego  adresu docelowego za pomocą wywołania recvmsg(2) z MSG_ERRQUEUE w
       msg_name nie działa w niektórych jądrach Linux 2.2.

ZOBACZ TAKŻE

       recvmsg(2), sendmsg(2), byteorder(3),  capabilities(7),  icmp(7),  ipv6(7),  netdevice(7),
       netlink(7), raw(7), socket(7), tcp(7), udp(7), ip(8)

       Plik źródeł jądra Documentation/networking/ip-sysctl.txt.

       RFC 791  -  oryginalny  opis  IP.  RFC 1122  - wymagania stacji IPv4. RFC 1812 - wymagania
       rutera IPv4.

TŁUMACZENIE

       Autorami  polskiego   tłumaczenia   niniejszej   strony   podręcznika   są:   Paweł   Wilk
       <siefca@pl.qmail.org>,    Robert    Luberda    <robert@debian.org>    i    Michał   Kułach
       <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe  informacje  o  warunkach  licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub  nowszej.  Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres listy dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.