Provided by: manpages-pl_20060617-4_all bug

NAZWA

       ip - implementacja protokolu IPv4 dla systemu Linux

SK/LADNIA

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/ip.h> /* nadzbior poprzedniego */

       tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
       udp_socket = socket(PF_INET, SOCK_DGRAM, 0);
       raw_socket = socket(PF_INET, SOCK_RAW, protok'o/l);

OPIS

       Linux  implementuje  protokol  IPv4  opisany  w  RFC 791 i RFC 1122. ip
       zawiera drugi poziom implementacji adresowania grupowego (multicasting)
       zgodny z RFC 1112. Zawiera te router IP, wlczajc w to filtr pakietow.

       Interfejs  programistyczny  jest zgodny gniazdami BSD. Wicej informacji
       na temat gniazd mona znale, przegldajc socket(7).

       Gniazdo IP jest  tworzone  poprzez  wywolanie  funkcji  socket(2)  jako
       socket(PF_INET,  rodzaj_gniazda,  protok'o/l).  Poprawne  typy  gniazd to
       SOCK_STREAM  sluce  do  tworzenia  gniazd  poredniczcych   w   obsludze
       protokolu  tcp(7),  take SOCK_DGRAM obslugujce protokol udp(7), a nawet
       SOCK_RAW  pozwalajce  tworzy  gniazda   raw(7)   (surowe)   umoliwiajce
       bezporedni  dostp do protokolu IP. protok'o/l jest protokolem bazujcym na
       IP.  Informacja  o  nim  jest  umieszczana  w  naglowku  wysylanego  bd
       odbieranego  pakietu IP. Dla gniazd TCP poprawnymi wartociami s tylko 0
       i IPPROTO_TCP, a dla gniazd UDP - 0 i IPPROTO_UDP.  Dla  SOCK_RAW  mona
       poda  dowolny  prawidlowy  numer  protokolu  IP  okrelony  przez IANA w
       RFC 1700.

       Kiedy proces chce  odbiera  nowe,  nadchodzce  pakiety  lub  polczenia,
       powinien  podlczy  gniazdo  do  adresu  lokalnego  interfejsu  za pomoc
       funkcji bind(2). Do dowolnej lokalnej pary (adres, port)  mona  podlczy
       tylko  jedno  gniazdo  IP.  Gdy  w  wywolaniu  bind  podana  jest warto
       INADDR_ANY,  to  gniazdo  zostanie  dowizane  do  wszystkich  lokalnych
       interfejsow sieciowych. Gdy dla niedowizanego gniazda zostanie wywolane
       listen(2) lub connect(2), gniazdo to zostanie automatycznie dowizane do
       losowo  wybranego  wolnego  portu,  przy  czym  adres  lokalny zostanie
       ustawiony na INADDR_ANY.

       Przypisywanie (czsto w literaturze: "nazywanie") lokalnego gniazda  TCP
       jest  niemoliwe  przez  pewien  okres  czasu po jego zamkniciu, chyba e
       zostanie dla tego gniazda ustawiony atrybut  SO_REUSEADDR.  Naley  uywa
       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  protokol  IP  nie
       zawiera  numerow  portow,  s  one zaimplementowane w protokolach wyszej
       warstwy, takich jak udp(7) i tcp(7). Dla gniazd surowych sin_port  jest
       ustawione na protokol IP.

         struct sockaddr_in {
             sa_family_t    sin_family; /* rodzina adresow: AF_INET  */
             u_int16_t      sin_port;   /* port - sieciowa kolejno bajtow */
             struct in_addr sin_addr;   /* adres internetowy */
         };

         /* Adres internetowy */
         struct in_addr {
             u_int32_t      s_addr;     /* adres - sieciowa kolejno bajtow */
         };

       sin_family  ma  zawsze  warto AF_INET. Jest to wymagane; w Linuksie 2.2
       wikszo funkcji sieciowych zwraca EINVAL jeli brakuje  tego  ustawienia.
       sin_port  zawiera  numer  portu  podany  w  sieciowej kolejnoci bajtow.
       Numery portow nisze ni 1024 s nazywane portami  zarezerwowanymi.  Tylko
       procesy     uprzywilejowane     (tj.     z     ustawionym     atrybutem
       CAP_NET_BIND_SERVICE) mog wywola bind(2) dla tego rodzaju gniazd. Naley
       zauway,  e  surowy  protokol  IPv4  jako  taki nie zawiera pojcia portu
       (takie rozronienie jest dopiero w warstwie  transportowej,  a  to  jest
       warstwa  sieciowa).  Numery portow wystpuj dopiero w protokolach wyszej
       warstwy, takich jak tcp(7) i udp(7).

       sin_addr to adres IP hosta  (maszyny).  Pole  s_addr  struktury  struct
       in_addr  zawiera adres interfejsu maszyny w sieciowej kolejnoci bajtow.
       Polu  in_addr  naley  albo  przypisa  jedn  z  wartoci  INADDR_*   (np.
       INADDR_ANY), albo uy funkcji bibliotecznych inet_aton(3), inet_addr(3),
       inet_makeaddr(3) do ustawienia wartoci, albo ustawi  bezporednio  przez
       resolvera   (patrz   te  gethostbyname(3)).  Adresy  IPv4  dzielimy  na
       pojedyncze (unicast), rozgloszeniowe (broadcast) i grupowe (multicast).
       Adresy   pojedyncze   okrelaj   pojedynczy  interfejs  maszyny,  adresy
       rozgloszeniowe  okrelaj  wszystkie  maszyny  w  obrbie   jakiej   sieci
       (podsieci),  a  adresy  grupowe wszystkie maszyny w obrbie jakiej grupy
       odbiorcow. Datagramy kierowane do adresow rozgloszeniowych  trafiaj  do
       odbiorcy   tylko   wtedy,   gdy   jego  gniazdo  ma  ustawiony  atrybut
       rozgloszenia SO_BROADCAST. Ten sam atrybut musi by  te  ustawiony,  gdy
       zachodzi   potrzeba   wyslania  datagramow  rozgloszenia.  W  aktualnej
       implementacji   gniazda   polczeniowe   mog   uywa   wylcznie   adresow
       pojedynczych.

       Naley  zauway, e dla adresu i portu zawsze jest uywana sieciowa kolejno
       bajtow. W szczegolnoci oznacza to, e trzeba uywa funkcji  htons(3)  dla
       numeru przypisanego do portu. Wszystkie funkcje standardowej biblioteki
       manipulujce adresem/portem automatycznie przeksztalcaj podan  warto  na
       jej sieciow reprezentacj.

       Istnieje  kilka adresow specjalnych: INADDR_LOOPBACK (127.0.0.1) zawsze
       odnosi si do lokalnego hosta  poprzez  urzdzenie  loopback;  INADDR_ANY
       (0.0.0.0)  oznacza  przy  dowizywaniu  dowolny  adres; INADDR_BROADCAST
       (255.255.255.255) oznacza  dowolny  host  i  ze  wzgldow  historycznych
       zachowuje si przy dowizywaniu tak samo jak INADDR_ANY.

OPCJE GNIAZD

       IP  wspiera  niektore  opcje  specyficzne  dla  protokolu, ktore mog by
       ustawione przy uyciu setsockopt(2) i odczytane z  pomoc  getsockopt(2).
       Poziom  opcji  gniazda  dla  IP to IPPROTO_IP. Dla kadego ze znacznikow
       logicznych warto calkowita zero oznacza falsz, a kada inna - prawd.

       IP_OPTIONS
              Ustawia lub pobiera opcje IP, ktore bd wysylane z kadym pakietem
              z  danego  gniazda.  Argumenty  s  wskanikiem  do  bufora pamici
              zawierajcego opcje i ich dlugoci. setsockopt(2) ustawia opcje IP
              skojarzone  z  gniazdem. Maksymalny rozmiar opcji dla IPv4 to 40
              bajtow. Zobacz  RFC 791,  by  pozna  moliwe  opcje.  Gdy  pakiet
              wstpnego   potwierdzenia   polczenia   (ACK)  dla  gniazda  typu
              SOCK_STREAM zawiera opcje IP, to opcje wychodzcego pakietu IP bd
              automatycznie pobrane z opcji IP pobranego pakietu z odwroconymi
              naglowkami  mowicymi  o  trasie.   Po   ustanowieniu   polczenia
              przychodzce  pakiety  nie  s  uprawnione do zmiany swoich opcji.
              Przetwarzanie wszystkich przychodzcych opcji rodla jest domylnie
              wylczone,  ale  mona  je  wlczy  za  pomoc  kontrolki systemowej
              accept_source_route. W przypadku gniazd datagramowych  opcje  IP
              mog  by  ustawione  jedynie  przez uytkownika lokalnego. Funkcja
              getsockopt(2) z argumentem  IP_OPTIONS  zwroci  obecnie  wyslane
              opcje przez umieszczenie ich w dostarczonym buforze.

       IP_PKTINFO
              Przekazuje  pomocniczy  komunikat IP_PKTINFO zawierajcy struktur
              pktinfo dostarczajc troch informacji  o  przychodzcym  pakiecie.
              Dziala  to  jedynie  dla  gniazd  datagramowych.  Argument  jest
              znacznikiem  mowicym  gniazdu,  czy  naley  przekaza   komunikat
              IP_PKTINFO,    czy    te    nie.   Sam   komunikat   moe   zosta
              przeslany/otrzymany  wraz  z  pakietem  jedynie  jako  komunikat
              sterujcy 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;     /* Naglowek adresu
                                                    docelowego */
                };

              ipi_ifindex  jest  unikatowym  indeksem  interfejsu, przez ktory
              pakiet zostal odebrany. Adres ipi_spec_dst jest lokalnym adresem
              pakietu, a ipi_addr jest adresem docelowym wynikajcym z naglowka
              pakietu.  Jeli  IP_PKTINFO  jest  przekazane  do  sendmsg(2),  a
              ipi_spec_dst ma warto niezerow, to IP_PKTINFO zostanie uyte jako
              rodlowy adres lokalny podczas przeszukiwania tablicy routingu  i
              dla   ustawienia   opcji   routingu  wg  adresu  rodlowego.  Gdy
              ipi_ifindex ma  warto  niezerow,  to  podstawowy  adres  lokalny
              interfejsu  wskazywanego przez ten indeks nadpisuje ipi_spec_dst
              podczas przeszukiwania tablicy routingu.

       IP_RECVTOS
              Jeli  jest  ustawione,  to  pomocniczy  komunikat  IP_TOS   jest
              przepuszczany  razem  z nadchodzcymi pakietami. Zawiera on bajt,
              ktory okrela pole zdefiniowane take jako  bajt  znajdujce  si  w
              naglowku   pakietu,  a  zwane  Typ  Uslugi/Pierwszestwa.  Wymaga
              logicznego znacznika w postaci liczby calkowitej.

       IP_RECVTTL
              Gdy ten znacznik jest ustawiony,  przepuszczany  jest  komunikat
              pomocniczy  IP_TTL,  zawierajcy pole okrelane mianem "czas ycia"
              odbieranego pakietu w postaci bajtu. Nie  jest  to  wspierane  w
              przypadku strumieniowych gniazd typu SOCK_STREAM.

       IP_RECVOPTS
              Przekazuje   uytkownikowi   wszystkie   nadchodzce  opcje  IP  z
              komunikatu sterujcego IP_OPTIONS. Naglowek wyboru trasy  i  inne
              opcje  s ju wstpnie wypelnione informacjami o lokalnej maszynie.
              Nie obslugiwane w przypadku gniazd typu SOCK_STREAM.

       IP_RETOPTS
              Dzialanie  identyczne  do  IP_RECVOPTS,   ale   zwraca   surowe,
              nieprzetworzone  opcje,  wlcznie  z  rekordem  opcji,  mowicym o
              znaczniku czasowym i trasie, nie wypelnionym  wartociami  w  tym
              przejciu pakietu.

       IP_TOS Ustawia    lub   pobiera   pole   znacznika   Typ-Uslugi   (ang.
              Type-Of-Service, w skrocie TOS), ktore jest przesylane  z  kadym
              pakietem  IP  pochodzcym  z  danego  gniazda.  Sluy do ustalenia
              priorytetow pakietow w sieci. TOS  jest  bajtem.  Oto  definicje
              niektorych   standardowych   znacznikow  TOS:  IPTOS_LOWDELAY  -
              minimalizacja oponienia we wzajemnym ruchu,  IPTOS_THROUGHPUT  -
              optymalizacja wyjcia, IPTOS_RELIABILITY - optymalizacja pod ktem
              niezawodnoci, a  IPTOS_MINCOST  powinna  by  uywana  jako  "dane
              wypelniajce"  tam,  gdzie  szybko  transmisji  nie  ma  wikszego
              znaczenia. Mona poda najwyej jedn z powyszych wartoci TOS.  Inne
              bity  s  niepoprawne  i  powinny  by  wyzerowane. Linux domylnie
              wysyla najpierw datagram IPTOS_LOWDELAY, ale dokladne zachowanie
              zaley od konfiguracji wlaciwoci szeregowania. Niektore poziomy o
              wysokim   priorytecie   mog   wymaga   uprawnie   administratora
              (ustawionego atrybutu CAP_NET_ADMIN). Priorytet mona te ustawi w
              sposob niezaleny od protokolu poprzez opcj gniazda  (SOL_SOCKET,
              SO_PRIORITY) (patrz te socket(7)).

       IP_TTL Ustawia  lub  pobiera  pole  "czas  ycia"  (ang. Time-To-Live, w
              skrocie TTL) dla kadego wychodzcego z danego gniazda pakietu IP.

       IP_HDRINCL
              Jeli wlczone to dopuszczalne  jest  tworzenie  przez  uytkownika
              wlasnego  naglowka IP przed danymi uytkownika. Dziala to jedynie
              dla gniazd SOCK_RAW. Patrz raw(7), by uzyska  wicej  informacji.
              Gdy  ten  znacznik  jest  wlczony,  to  wartoci  ustawiane przez
              IP_OPTIONS, IP_TTL i IP_TOS s ignorowane.

       IP_RECVERR (zdefiniowane w <linux/errqueue.h>)
              Wlcza zwikszon pewno przy realizowaniu zawiadomie o bldach.  Gdy
              jest   to   ustawione   w  gniedzie  datagramowym  to  wszystkie
              generowane  bldy  bd  zapamitane  w  specjalnej  kolejce   bldow
              przypisanej   do  gniazda.  Gdy  uytkownik  (proces  uytkownika)
              otrzyma bld (przez zwrocony kod bldu operacji  na  gniedzie)  to
              bldy  mog by odebrane przy uyciu funkcji recvmsg(2) z ustawionym
              znacznikiem     MSG_ERRQUEUE.     Struktura     opisujca     bld
              sock_extended_err  zostanie przekazana w pomocniczym komunikacie
              o typie IP_RECVERR i  poziomie  IPPROTO_IP.  Jest  to  niezwykle
              pomocne  przy  niezawodnym  przechwytywaniu  bldow niepolczonych
              gniazd. Odbierana z kolejki bldow porcja danych zawiera pakiet z
              informacj o bldzie.

              Komunikat sterujcy IP_RECVERR zawiera struktur sock_extended_err
              zdefiniowan nastpujco:

                #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 {
                    u_int32_t ee_errno;   /* numer bldu */
                    u_int8_t  ee_origin;  /* rodlo bldu */
                    u_int8_t  ee_type;    /* typ */
                    u_int8_t  ee_code;    /* kod */
                    u_int8_t  ee_pad;
                    u_int32_t ee_info;    /* informacje dodatkowe */
                    u_int32_t ee_data;    /* inne dane */
                    /* Dalej mog wystpi dodatkowe informacja */
                };

                struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno zawiera numer errno bldu kolejki. ee_origin jest  kodem
              miejsca  pochodzenia bldu. Pozostale pola s zalene od protokolu.
              Makro  SO_EE_OFFENDER   zwraca   wskanik   do   adresu   obiektu
              sieciowego,  z  ktorego  pochodzil  bld  o  zadanym  wskaniku do
              komunikatu pomocniczego. Gdy ten  adres  nie  jest  znany,  pole
              sa_family struktury sockaddr zawiera warto AF_UNSPEC a pozostale
              pola tej struktury sockaddr s niezdefiniowane.

              IP  uywa  struktury  sock_extended_err   w   nastpujcy   sposob:
              ee_origin  ustawione  na SO_EE_ORIGIN_ICMP dla bldow odbieranych
              jako  pakiet  ICMP  albo   te   SO_EE_ORIGIN_LOCAL   dla   bldow
              generowanych  lokalnie. Nieznane wartoci naley ignorowa. ee_type
              i ee_code s ustawiane zgodnie z typem i  kodem  pol  w  naglowku
              ICMP.  ee_info  zawiera  rozpoznan warto MTU dla bldow EMSGSIZE.
              Komunikat zawiera rownie sockaddr_in wz/la, ktory spowodowal bld,
              a  do  ktorego  mona uzyska dostp za pomoc makra SO_EE_OFFENDER.
              Pole sin_family adresu SO_EE_OFFENDER ma  warto  AF_UNSPEC,  gdy
              rodlo  bldu  nie jest znane. Gdy bld pochodzi z sieci, wszystkie
              opcje IP (IP_OPTIONS, IP_TTL itd.) wlczone w gniedzie i  zawarte
              w  pakiecie  bldu  s  przekazywane  jako  komunikaty  kontrolne.
              Wlaciwe dane pakietu,  ktory  spowodowal  bld  s  zwracane  jako
              normalne  dane.  Naley  zauway,  e  TCP  nie  ma  kolejki bldow;
              MSG_ERRQUEUE jest niedozwolone w przypadku  gniazd  SOCK_STREAM.
              Wszystkie bldy s przekazywane poprzez zwracan warto funkcji albo
              SO_ERROR.

              Dla  gniazd  surowych,  IP_RECVERR   wlcza   przepuszczanie   do
              aplikacji  wszystkich  odebranych  komunikatow  ICMP o bldach, w
              przeciwnym  przypadku  bldy  s  zglaszane   tylko   dla   gniazd
              polczonych.

              Mamy tu do czynienia ze znacznikiem logicznym zapisanym za pomoc
              liczby calkowitej IP_RECVERR, domylnie wylczonym.

       IP_MTU_DISCOVER
              Ustawia lub pobiera  opcj  badania  MTU  cieki  (ang.  Path  MTU
              Discovery)  dla  gniazda.  Gdy  opcja  ta jest wlczona, to Linux
              bdzie przeprowadzal badanie MTU cieki dla tego gniazda zgodnie z
              definicj  zawart  w  RFC 1191. Znacznik zakazu fragmentacji jest
              ustawiany we wszystkich pakietach wychodzcych.  Ogolne,  domylne
              zachowanie  okrelone  dla  danego  systemu  jest ustawiane przez
              "kontrolk systemow" ip_no_pmtu_disc dla gniazd typu  SOCK_STREAM
              i  wylczone  dla  wszystkich  innych  typow  gniazd. W przypadku
              gniazd innych ni SOCK_STREAM za odpowiednie,  zgodne  z  wartoci
              MTU,   spakietowanie   danych   i   za   wykonanie  ewentualnych
              retransmisji  jest  odpowiedzialny  program   uytkownika.   Jdro
              odrzuci pakiety wiksze ni znane MTU cieki, gdy ten znacznik jest
              ustawiony (lcznie z EMSGSIZE ).

              Znaczniki badania MTU cieki   Znaczenia
              IP_PMTUDISC_WANT              Uywaj ustawie zalenych od trasy.
              IP_PMTUDISC_DONT              Nie badaj MTU cieki.
              IP_PMTUDISC_DO                Zawsze badaj MTU cieki

              Gdy wlczone jest badanie MTU cieki, jdro automatycznie  namierza
              wartoci  MTU cieki dla kadego hosta docelowego. Gdy aktywne jest
              polczenie  z  danym  hostem,  mona  wygodnie  odczyta  aktualnie
              rozpoznan  warto  MTU  cieki  za  pomoc  connect(2) uywajc opcji
              gniazda IP_MTU (np. po wystpieniu bldu  EMSGSIZE).  Moe  ona  si
              zmienia  z czasem. Dla gniazd bezpolczeniowych z wieloma hostami
              docelowymi, MTU dla danego, rownie nowego, hosta docelowego mona
              uzyska  za  pomoc kolejki bldow (zobacz IP_RECVERR). Po nadejciu
              kadej aktualizacji MTU zostanie skolejkowany nowy bld.

              W  trakcie  rozpoznawania  MTU,  pakiety  inicjujce   z   gniazd
              datagramowych  mog  zosta  porzucone. Programy korzystajce z UDP
              powinny by tego wiadome  i  nie  bra  tego  pod  uwag  w  swojej
              strategii retransmisji pakietow.

              Aby zainicjowa proces badania MTU cieki dla gniazd niepolczonych
              mona rozpocz z duym rozmiarem datagramu (do 64K-naglowek bajtow)
              i pozwoli na jego zmniejszenie w wyniku aktualizacji MTU cieki.

              Aby   oszacowa   inicjalne  MTU  cieki,  naley  podlczy  gniazdo
              datagramowe do adresu docelowego za  pomoc  connect(2)  i  pobra
              MTU, wolajc getsockopt(2) z opcj IP_MTU.

       IP_MTU Pobiera znan aktualnie warto MTU cieki obecnego gniazda. Jest to
              poprawne tylko,  gdy  gniazdo  zostalo  polczone.  Zwraca  liczb
              calkowit. Dziala tylko z getsockopt(2).

       IP_ROUTER_ALERT
              Przekazuje  wszystkie  pakiety  z  opcj  Alarmu Rutera IP, ktore
              mialyby by przekazywane (ang. forwarded) do tego gniazda. Dziala
              tylko  dla  gniazd  surowych.  Jest to przydatne na przyklad dla
              demonow RSVP dzialajcych w przestrzeni uytkownika.  Wykorzystane
              pakiety  nie s przekazywane (ang. forwarded) przez jdro. Ponowne
              ich wyslanie naley do obowizkow programu uytkownika. Dowizywanie
              gniazda jest w tym przypadku ignorowane, pakiety te s filtrowane
              jedynie w oparciu o  protokol.  Wymaga  liczby  calkowitej  jako
              argumentu.

       IP_MULTICAST_TTL
              Ustawia  lub  pobiera  warto czas-ycia-pakietu dla wychodzcych z
              tego  gniazda  pakietow  grupowych.  Jest  bardzo   istotnym   w
              przypadku adresowania grupowego by ustawi najmniejsz moliw warto
              TTL. Domylnie jest to 1,  co  oznacza,  e  pakiety  grupowe  nie
              opuszczaj  sieci  lokalnej,  chyba  e program uytkownika wyranie
              tego da. Argument jest liczb calkowit.

       IP_MULTICAST_LOOP
              Ustawia lub pobiera logiczny argument typu calkowitego, mowicy o
              tym,  czy  przesylane pakiety grupowe powinny wraca do lokalnego
              gniazda.

       IP_ADD_MEMBERSHIP
              Przylcza grup adresow. 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, ktor aplikacja  chce  podlczy
              lub  rozlczy.  Musi  by  to  poprawny adres grupowy (multicast).
              imr_address jest to  adres  lokalnego  interfejsu,  przez  ktory
              system  powinien  polczy  grup;  jeli  jest rowny INADDR_ANY, to
              odpowiedni interfejs jest wybierany  przez  system.  imr_ifindex
              jest  indeksem  interfejsu, ktory powinien by podlczony/odlczony
              do obslugi grupy imr_multiaddr  lub  0,  by  wskaza  na  dowolny
              interfejs.

              Dla   kompatybilnoci,   stara   struktura   ip_mreq   wci   jest
              obslugiwana. Roni si wprawdzie od ip_mreqn, lecz  tylko  tym,  e
              nie zawiera pola imr_ifindex. Dziala tylko z setsockopt(2).

       IP_DROP_MEMBERSHIP
              Odlcza  si  od grupy adresow. Argumentem jest struktura ip_mreqn
              lub ip_mreq podobna do IP_ADD_MEMBERSHIP.

       IP_MULTICAST_IF
              Ustawia lokalne urzdzenie dla gniazda grupowego. Argumentem jest
              struktura ip_mreqn lub ip_mreq podobna do IP_ADD_MEMBERSHIP.

              Gdy  podana  jest  niepoprawna opcja gniazda, to zwracan wartoci
              jest ENOPROTOOPT.

KONTROLKI SYSTEMOWE (SYSCTL)

       Protokol  IP  obsluguje  interfejs  kontrolek  systemowych  (sysctl)  i
       korzysta  z  niego do ustawiania niektorych opcji globalnych. Kontrolki
       mog  by  dostpne  przez  zapis   lub   odczyt   wykonany   na   plikach
       /proc/sys/net/ipv4/*  lub  poprzez  uycie  interfejsu w postaci funkcji
       sysctl(2). Zmienne  opisane  jako  logiczne  pobieraj  liczb  calkowit,
       ktorej  warto  niezerowa ("true") oznacza, e dana opcja jest wlczona, a
       warto zerowa ("false") oznacza, e opcja jest wylczona.

       ip_always_defrag (logiczna)
              [Nowa w jdrze 2.2.13; we wczeniejszych wersjach  jdra  funkcj  t
              sterowalo    si    w    czasie   kompilacji   za   pomoc   opcji
              CONFIG_IP_ALWAYS_DEFRAG; ten plik nie  jest  obecny  w  2.4.x  i
              kolejnych]

              Gdy  ten  znacznik logiczny jest wlczony (rony od 0) przychodzce
              fragmenty (czci pakietow IP, ktore si pojawiaj, gdy pewien  host
              pomidzy hostem rodlowym a docelowym zdecyduje, e pakiety byly za
              due   i   podzieli   je   na   kawalki)   bd   ponownie   zloone
              (zdefragmentowane)  przed  ich przetworzeniem, nawet jeli maj by
              przekazane dalej (and. forwarded).

              Naley wlcza jedynie przy dzialajcym firewallu, stanowicym glowne
              wejcie,  do  danej  sieci  lub  dzialajcym przezroczystym proxy;
              nigdy nie naley tego wlcza na  zwyklym  routerze  lub  hocie.  W
              przeciwnym przypadku lczno moe zosta zaklocona, gdy fragmenty bd
              podroowa innymi lczami. Defragmentacja powoduje  rownie  znaczne
              wykorzystanie pamici i czasu procesora.

              Jest   to   wlczane   automagicznie,   gdy  skonfigurowane  jest
              maskowanie lub przezroczyste proxy.

       ip_autoconfig
              Nie udokumentowane.

       ip_default_ttl (liczba, domylnie: 64)
              Ustawia  domyln   warto   "czasu   ycia"   (ang.   time-to-live)
              wychodzcych  pakietow. Moe by ona zmieniona dla gniazda za pomoc
              opcji IP_TTL.

       ip_dynaddr (logiczna; domylnie: wylczona)
              Wlcza dynamiczne adresowanie gniazda oraz  przepisywanie  adresu
              dla  maskowania  przy  zmianie adresu interfejsu. Jest to bardzo
              przydatne w przypadku korzystania  z  interfejsu  sprzgnitego  z
              lini  telefoniczn,  ktorego  adres  IP moe si zmienia. 0 oznacza
              brak przepisywania,  1  wlcza  przepisywanie,  a  2  wlcza  tryb
              rozwlekly (ang. verbose).

       ip_forward(logiczna; domylnie: wylczona)
              Wlcza   przekazywanie  (ang.  forwarding)  pakietow  przy  uyciu
              logicznego  znacznika.  Moe  by  ustawione  take  na   podstawie
              interfejsu.

       ip_local_port_range
              Zawiera  dwie  liczby  calkowite,  ktore definiuj lokalny zakres
              portow przydzielanych  gniazdom.  Przydzielanie  zaczyna  si  od
              pierwszej  podanej  wartoci  i koczy na drugiej. Naley zauway, e
              zakres  ten  nie  powinien  pokrywa   si   z   zakresem   portow
              wykorzystywanym   do   maskowania  (chocia  taka  sytuacja  jest
              obslugiwana). Dowolny  wybor  moe  rownie  powodowa  problemy  z
              niektorymi  firewallami,  ktore  robi  pewne zaloenia odnonie do
              portow uywanych lokalnie. Pierwsza liczba powinna  by  rowna  co
              najmniej  >1024,  a  lepiej >4096, aby unikn konfliktow z dobrze
              znanymi portami i zminimalizowa problemy z firewallami.

       ip_no_pmtu_disc (logiczna; domylnie: wylczona)
              Jeli jest to wlczone, to domylnie nie bdzie  wykonywane  badanie
              MTU  cieki  dla  gniazd  TCP.  Badanie MTU moe si nie sprawdza w
              przypadku le skonfigurowanych firewalli  (odrzucajcych  wszelkie
              pakiety ICMP) lub le skonfigurowanych interfejsow (np. polczenie
              typu point-to-point, gdzie oba koce  nie  zgadzaj  si  na  MTU).
              Lepiej poprawi wszelkie wadliwie skonfigurowane rutery po drodze
              ni calkowicie wylczy badanie MTU cieki,  poniewa  niewykonywanie
              tej operacji pociga za sob due straty w obrbie sieci.

       ip_nonlocal_bind (logiczna; domylnie: wylczona)
              Jeeli ustawione, pozwala procesowi na wywolanie funkcji bind() z
              nielokalnym adresem IP, co moe by  calkiem  przydatne,  ale  moe
              popsu niektore aplikacje.

       ip6frag_time (liczba, domylnie: 30)
              Czas w sekundach przetrzymywania w pamici fragmentu IPv6.

       ip6frag_secret_interval (liczba, domylnie: 600)
              Interwal  (w  sekundach)  odwieania  sekretnego  klucza  funkcji
              mieszkajcej (lub czasu ycia tego klucza) dla fragmentow IPv6.

       ipfrag_high_thresh (liczba), ipfrag_low_thresh (liczba)
              Jeli liczba zebranych w  kolejce  fragmentow  IP  osignie  warto
              okrelon  przez  ipfrag_high_thresh, wtedy kolejka jest oproniana
              do  iloci  okrelonej  w  ipfrag_low_thresh.  Zawiera  ona  liczb
              calkowit z podan liczb bajtow.

       neigh/*
              Patrz arp(7).

KONTROLKI WEJCIA/WYJCIA (IOCTL)

       Do  IP  maj  zastosowanie  wszystkie  kontrolki wejcia/wyjcia opisane w
       socket(7).

       Kontrolki konfigurowania ogolnych  parametrow  urzdzenia  s  opisane  w
       netdevice(7).

UWAGI

       Naley  by bardzo ostronym przy stosowaniu opcji SO_BROADCAST - nie jest
       ona w systemie Linux uprzywilejowana, jest wic  latwo  przeciy  sie  za
       pomoc   niedbale   uytych  rozglosze.  W  przypadku  protokolow  nowych
       aplikacji lepiej uywa grupy  adresowej  zamiast  rozglosze.  Stosowanie
       adresow rozgloszeniowych jest nieostronoci.

       Niektore  inne  implementacje  gniazd  BSD  dopuszczaj dla gniazd opcje
       IP_RCVDSTADDR i IP_RECVIF uywane do pobierania adresu  przeznaczenia  i
       interfejsu  odbieranych datagramow. Linux udostpnia bardziej ogoln opcj
       IP_PKTINFO, robic to samo.

       Niektore implementacja gniazd BSD take udostpniaj opcj IP_RECVTTL,  ale
       lcznie  z przychodzcym pakietem jest przekazywanypomocniczy komunikat o
       typie IP_RECVTTL. W tym wlanie roni si to od opcji  IP_TTL,  uywanej  w
       Linuksie.

       Uywanie poziomu opcji gniazd SOL_IP jest nieprzenone, gniazda oparte na
       BSD uywaj poziomu IPPROTO_IP.

B/LDY

       ENOTCONN
              Operacja moe by wykonana tylko na polczonym gniedzie, a  gniazdo
              nie zostalo polczone.

       EINVAL Przypisano  niewlaciwy  argument. W przypadku operacji wysylania
              moe to by spowodowane przez wysylanie drog przypisan do  czarnej
              dziury.

       EMSGSIZE
              Datagram jest wikszy ni warto MTU po drodze do celu i nie moe by
              podzielony.

       EACCES Uytkownik probowal wykona operacj  nie  majc  potrzebnych  praw.
              Obejmuje  to:  wysylanie  pakietu  na  adres  rozgloszeniowy bez
              ustawionego znacznika SO_BROADCAST., wysylanie  pakietu  zakazan
              drog,  prob  modyfikacji  ustawie  firewalla  nie  majc uprawnie
              administratora  (ustawionego  znacznika   CAP_NET_ADMIN),   prob
              przypisania    zarezerwowanego    portu    nie   majc   uprawnie
              administratora (ustawionego znacznika CAP_NET_BIND_SERVICE).

       EADDRINUSE
              Probowano przypisa port do adresu bdcego ju w uyciu.

       ENOPROTOOPT i EOPNOTSUPP
              Przypisano niewlaciw opcj gniazda.

       EPERM  Uytkownik nie ma praw do ustawiania wysokiego priorytetu, zmiany
              konfiguracji  lub wysylania sygnalow do danych procesow lub grup
              procesow.

       EADDRNOTAVAIL
              Zadano nieistniejcego interfejsu lub dany adres rodlowy nie jest
              adresem lokalnym.

       EAGAIN Operacja  na  gniedzie  z  wylczonym  blokowaniem  spowodowalaby
              zablokowanie.

       ESOCKTNOSUPPORT
              Gniazdo nie  jest  skonfigurowane  lub  zadano  nieznanego  typu
              gniazda.

       EISCONN
              connect(2) byla wywolana na ju polczonym gniedzie.

       EALREADY
              Operacja lczenia na gniedzie nieblokujcym ju trwa.

       ECONNABORTED
              Polczenie zostalo zamknite podczas accept(2).

       EPIPE  Polczenie  zostalo  nieoczekiwanie zamknite lub wylczyl si drugi
              koniec.

       ENOENT SIOCGSTAMP bylo wywolane na gniedzie, do ktorego nie dotarl aden
              pakiet.

       EHOSTUNREACH
              Brak wpisu okrelajcego adres docelowy w tabeli routingu. Bld ten
              moe by wywolany przez komunikat ICMP od zdalnego routera lub dla
              lokalnej tabeli routingu.

       ENODEV Urzdzenie   sieciowe   niedostpne  lub  niezdolne  do  wysylania
              pakietow IP.

       ENOPKG Podsystem jdra nie byl konfigurowany.

       ENOBUFS, ENOMEM
              Niewystarczajca  ilo  dostpnej  pamici.  Czsto  oznacza  to,   e
              przydzielanie  pamici jest ograniczone przez ograniczenia bufora
              gniazda, a nie przez ograniczenia pamici systemowej. Jednak  nie
              jest to pewne na 100%.

       Inne  bldy  mog  by generowane przez protokoly niszych warstw; obejrzyj
       tcp(7), raw(7), udp(7) i socket(7).

WERSJE

       IP_MTU, IP_MTU_DISCOVER, IP_PKTINFO,  IP_RECVERR  i  IP_ROUTER_ALERT  s
       nowymi  opcjami  w  Linuksie  2.2.  S  one  jednoczenie specyficzne dla
       Linuksa i nie powinny by uywane w przenonych programach.

       struct ip_mreqn jest nowa w Linuksie 2.2. Linux  2.0  wspieral  jedynie
       ip_mreq.

       Kontrolki systemowe pojawily si z Linuksem 2.2.

ZGODNO

       Dla  zgodnoci  z  Linuksem  2.0,  wci  jest  dopuszczalna  przestarzala
       skladnia socket(PF_INET, SOCK_PACKET,  protok'o/l),  by  stworzy  gniazdo
       typu packet(7). Nie jest to zbyt poprawne i powinno by zastpowane przez
       socket(PF_PACKET, SOCK_RAW, protok'o/l). Glownym powodem  jest  ronica  w
       strukturze  adresowej  sockaddr_ll przechowujcej informacje dla warstwy
       lcza (dokladniej: warstwy kanalowej), ktore kiedy przechowywane byly  w
       sockaddr_pkt.

B/LDY

       Jest zbyt wiele nieokrelonych wartoci bldow.

       Nie  s  opisane kontrolki wejcia/wyjcia do konfigurowania specyficznych
       dla IP opcji interfejsu i tabele ARP.

       Niektore  wersje  glibc  zapominaj  zadeklarowa  in_pktinfo.  Mona   to
       aktualnie obej, kopiujc j do programu z niniejszej strony podrcznika.

       Pobieranie  pierwotnego adresu docelowego za pomoc wywolania recvmsg(2)
       z MSG_ERRQUEUE w msg_name nie dziala w niektorych jdrach 2.2.

ZOBACZ TAKE

       recvmsg(2), sendmsg(2), ipfw(4), capabilities(7),  netlink(7),  raw(7),
       socket(7), tcp(7), udp(7)

       RFC 791 zawiera pierwotn specyfikacj protokolu IP.
       RFC 1122 zawiera wymagania dla hostow IPv4.
       RFC 1812 zawiera wymagania dla routerow IPv4.

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.