if (!defined &M_WAITOK) {
    require 'sys/malloc.ph';
}
sub MLEN {( &MSIZE - $sizeof{'struct m_hdr'});}
sub MHLEN {( &MLEN - $sizeof{'struct pkthdr'});}
sub MINCLSIZE {( &MHLEN +  &MLEN);}
sub M_MAXCOMPRESS {( &MHLEN / 2);}
sub mtod {
    local($m,$t) = @_;
    eval "(($t)(($m)-> &m_data))";
}
sub dtom {
    local($x) = @_;
    eval "((($x) & ~( &MSIZE-1)))";
}
sub mtocl {
    local($x) = @_;
    eval "((($x) -  &mbutl) >>  &MCLSHIFT)";
}
sub cltom {
    local($x) = @_;
    eval "(( &caddr_t)( &mbutl + (($x) <<  &MCLSHIFT)))";
}
sub m_next { &m_hdr. &mh_next;}
sub m_len { &m_hdr. &mh_len;}
sub m_data { &m_hdr. &mh_data;}
sub m_type { &m_hdr. &mh_type;}
sub m_flags { &m_hdr. &mh_flags;}
sub m_nextpkt { &m_hdr. &mh_nextpkt;}
sub m_act { &m_nextpkt;}
sub m_pkthdr { &M_dat. &MH. &MH_pkthdr;}
sub m_ext { &M_dat. &MH. &MH_dat. &MH_ext;}
sub m_pktdat { &M_dat. &MH. &MH_dat. &MH_databuf;}
sub m_dat { &M_dat. &M_databuf;}
sub M_EXT {0x0001;}
sub M_PKTHDR {0x0002;}
sub M_EOR {0x0004;}
sub M_BCAST {0x0100;}
sub M_MCAST {0x0200;}
sub M_COPYFLAGS {( &M_PKTHDR| &M_EOR| &M_BCAST| &M_MCAST);}
sub MT_FREE {0;}
sub MT_DATA {1;}
sub MT_HEADER {2;}
sub MT_SOCKET {3;}
sub MT_PCB {4;}
sub MT_RTABLE {5;}
sub MT_HTABLE {6;}
sub MT_ATABLE {7;}
sub MT_SONAME {8;}
sub MT_SOOPTS {10;}
sub MT_FTABLE {11;}
sub MT_RIGHTS {12;}
sub MT_IFADDR {13;}
sub MT_CONTROL {14;}
sub MT_OOBDATA {15;}
sub M_DONTWAIT { &M_NOWAIT;}
sub M_WAIT { &M_WAITOK;}
sub MBUFLOCK {
    local($code) = @_;
    eval "{ 'int'  &ms =  &splimp(); { $code }  &splx( &ms); }";
}
sub MGET {
    local($m, $how, $type) = @_;
    eval "{  &MALLOC(($m), struct mbuf *,  &MSIZE,  &mbtypes[$type], ($how));  &if ($m) { ($m)-> &m_type = ($type);  &MBUFLOCK( &mbstat. &m_mtypes[$type]++;) ($m)-> &m_next =  &NULL; ($m)-> &m_nextpkt =  &NULL; ($m)-> &m_data = ($m)-> &m_dat; ($m)-> &m_flags = 0; }  &else ($m) =  &m_retry(($how), ($type)); }";
}
sub MGETHDR {
    local($m, $how, $type) = @_;
    eval "{  &MALLOC(($m), struct mbuf *,  &MSIZE,  &mbtypes[$type], ($how));  &if ($m) { ($m)-> &m_type = ($type);  &MBUFLOCK( &mbstat. &m_mtypes[$type]++;) ($m)-> &m_next =  &NULL; ($m)-> &m_nextpkt =  &NULL; ($m)-> &m_data = ($m)-> &m_pktdat; ($m)-> &m_flags =  &M_PKTHDR; }  &else ($m) =  &m_retryhdr(($how), ($type)); }";
}
sub MCLALLOC {
    local($p, $how) = @_;
    eval " &MBUFLOCK(  &if ( &mclfree == 0) ( &void) &m_clalloc(1, ($how));  &if ((($p) = ( &caddr_t) &mclfree) != 0) { ++ &mclrefcnt[ &mtocl($p)];  &mbstat. &m_clfree--;  &mclfree = (( &union  &mcluster *)($p))-> &mcl_next; } )";
}
sub MCLGET {
    local($m, $how) = @_;
    eval "{  &MCLALLOC(($m)-> &m_ext. &ext_buf, ($how));  &if (($m)-> &m_ext. &ext_buf !=  &NULL) { ($m)-> &m_data = ($m)-> &m_ext. &ext_buf; ($m)-> &m_flags |=  &M_EXT; ($m)-> &m_ext. &ext_size =  &MCLBYTES; } }";
}
sub MCLFREE {
    local($p) = @_;
    eval " &MBUFLOCK (  &if (-- &mclrefcnt[ &mtocl($p)] == 0) { (( &union  &mcluster *)($p))-> &mcl_next =  &mclfree;  &mclfree = ( &union  &mcluster *)($p);  &mbstat. &m_clfree++; } )";
}
if (defined &notyet) {
    eval 'sub MFREE {
        local($m, $n) = @_;
        eval "{  &MBUFLOCK( &mbstat. &m_mtypes[($m)-> &m_type]--;)  &if (($m)-> &m_flags &  &M_EXT) {  &if (($m)-> &m_ext. &ext_free) (*(($m)-> &m_ext. &ext_free))(($m)-> &m_ext. &ext_buf, ($m)-> &m_ext. &ext_size);  &else  &MCLFREE(($m)-> &m_ext. &ext_buf); } ($n) = ($m)-> &m_next;  &FREE(($m),  &mbtypes[($m)-> &m_type]); }";
    }';
}
else {
    eval 'sub MFREE {
        local($m, $nn) = @_;
        eval "{  &MBUFLOCK( &mbstat. &m_mtypes[($m)-> &m_type]--;)  &if (($m)-> &m_flags &  &M_EXT) {  &MCLFREE(($m)-> &m_ext. &ext_buf); } ($nn) = ($m)-> &m_next;  &FREE(($m),  &mbtypes[($m)-> &m_type]); }";
    }';
}
sub M_COPY_PKTHDR {
    local($to, $from) = @_;
    eval "{ ($to)-> &m_pkthdr = ($from)-> &m_pkthdr; ($to)-> &m_flags = ($from)-> &m_flags &  &M_COPYFLAGS; ($to)-> &m_data = ($to)-> &m_pktdat; }";
}
sub M_ALIGN {
    local($m, $len) = @_;
    eval "{ ($m)-> &m_data += ( &MLEN - ($len)) &~ ($sizeof{'long'} - 1); }";
}
sub MH_ALIGN {
    local($m, $len) = @_;
    eval "{ ($m)-> &m_data += ( &MHLEN - ($len)) &~ ($sizeof{'long'} - 1); }";
}
sub M_LEADINGSPACE {
    local($m) = @_;
    eval "(($m)-> &m_flags &  &M_EXT ? 0 : ($m)-> &m_flags &  &M_PKTHDR ? ($m)-> &m_data - ($m)-> &m_pktdat : ($m)-> &m_data - ($m)-> &m_dat)";
}
sub M_TRAILINGSPACE {
    local($m) = @_;
    eval "(($m)-> &m_flags &  &M_EXT ? ($m)-> &m_ext. &ext_buf + ($m)-> &m_ext. &ext_size - (($m)-> &m_data + ($m)-> &m_len) : &($m)-> &m_dat[ &MLEN] - (($m)-> &m_data + ($m)-> &m_len))";
}
sub M_PREPEND {
    local($m, $plen, $how) = @_;
    eval "{  &if ( &M_LEADINGSPACE($m) >= ($plen)) { ($m)-> &m_data -= ($plen); ($m)-> &m_len += ($plen); }  &else ($m) =  &m_prepend(($m), ($plen), ($how));  &if (($m) && ($m)-> &m_flags &  &M_PKTHDR) ($m)-> &m_pkthdr. &len += ($plen); }";
}
sub MCHTYPE {
    local($m, $t) = @_;
    eval "{  &MBUFLOCK( &mbstat. &m_mtypes[($m)-> &m_type]--;  &mbstat. &m_mtypes[$t]++;) ($m)-> &m_type = $t;}";
}
sub M_COPYALL {1000000000;}
sub m_copy {
    local($m, $o, $l) = @_;
    eval " &m_copym(($m), ($o), ($l),  &M_DONTWAIT)";
}
if (defined &KERNEL) {
    if (defined &MBTYPES) {
	if (defined &DATAKIT) {
	}
    }
}
1;
