bind(2) na neexistujici rozhrani

David Rohleder davro na ics.muni.cz
Úterý Listopad 27 22:25:15 CET 2001


peak na argo.troja.mff.cuni.cz (Pavel Kankovsky) writes:

> On Tue, 27 Nov 2001, Jan Kasprzak wrote:
> 
> > 	Zkuste tady dat neco, co v nejvyssim bajtu nema nulu. Treba
> > 0x11223344, nebo jen random(). Bez teto modifikace mi vas program prosel,
> > s ni hlasi chybu bind().
> 
> Vtip bude v tom, ze adresa 0.x.y.z je (podle mineni jadra) broadcast, a
> tudiz je povoleno se na nej bindnout. Na unicastove adresy neprirazene
> mistnim interfejsum lze bind udelat pouze kdyz je zapnuty transparent
> proxying a kdyz ma dotycny patricna opravneni.

#define ZERONET(x)      (((x) & htonl(0xff000000)) == htonl(0x00000000))

unsigned inet_addr_type(u32 addr)
{
        struct rt_key           key;
        struct fib_result       res;
        unsigned ret = RTN_BROADCAST;

        if (ZERONET(addr) || BADCLASS(addr))
                return RTN_BROADCAST;



Nevi nekdo, proc 0.0.0.0/8 je RTN_BROADCAST ? Je to napsane v nejakem
RFC? Chapu, ze by to mohlo zpusobovat problemy v routovani (musely by
se v jadre psat vyjimky pro sit s zacinajici nejakym poctem nul, coz
je jiste spatne, ale na druhou stranu by to bylo spravne :-)

Navic ta 0/8 mi pripadne, jako by vychazela ze stareho "tridniho
rozdeleni" :-) adresoveho prostoru. 

Osobne nevim, proc bych nemohl mit sit 0.0.1.0 a pritom splnovat
vsechna RFC.



-- 
-------------------------------------------------------------------------
David Rohleder						davro na ics.muni.cz
Institute of Computer Science, Masaryk University
Brno, Czech Republic
-------------------------------------------------------------------------


Další informace o konferenci Linux