Add clear one accounting entry control.
Structure fields changed to seem more standart.
This commit is contained in:
parent
611367b40f
commit
3107b31b8d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=5089
@ -205,10 +205,10 @@ struct ip_fw *chain;
|
||||
dprintf1("\n");
|
||||
|
||||
|
||||
for (f=chain;f;f=f->next)
|
||||
if ((src.s_addr&f->src_mask.s_addr)==f->src.s_addr
|
||||
&& (dst.s_addr&f->dst_mask.s_addr)==f->dst.s_addr) {
|
||||
if (f->via.s_addr && rif) {
|
||||
for (f=chain;f;f=f->fw_next)
|
||||
if ((src.s_addr&f->fw_smsk.s_addr)==f->fw_src.s_addr
|
||||
&& (dst.s_addr&f->fw_dmsk.s_addr)==f->fw_dst.s_addr) {
|
||||
if (f->fw_via.s_addr && rif) {
|
||||
for (ia_p=ia;ia_p;ia_p=ia_p->ifa_next) {
|
||||
if (!ia_p->ifa_addr ||
|
||||
ia_p->ifa_addr->sa_family!=AF_INET)
|
||||
@ -220,7 +220,7 @@ struct ip_fw *chain;
|
||||
continue;
|
||||
ia_i.s_addr=(((struct sockaddr_in *)\
|
||||
(ia_p->ifa_addr))->sin_addr.s_addr);
|
||||
if (ia_i.s_addr==f->via.s_addr)
|
||||
if (ia_i.s_addr==f->fw_via.s_addr)
|
||||
goto via_match;
|
||||
}
|
||||
/*
|
||||
@ -243,7 +243,7 @@ struct ip_fw *chain;
|
||||
*/
|
||||
continue;
|
||||
via_match:
|
||||
f_prt=f->flags&IP_FW_F_KIND;
|
||||
f_prt=f->fw_flg&IP_FW_F_KIND;
|
||||
if (f_prt==IP_FW_F_ALL) {
|
||||
/* Universal frwl - we've got a match! */
|
||||
goto got_match;
|
||||
@ -254,7 +254,7 @@ struct ip_fw *chain;
|
||||
* actually it is a concern of software which sets
|
||||
* firewall entries.
|
||||
*/
|
||||
if (f->flags&IP_FW_F_TCPSYN && notcpsyn)
|
||||
if (f->fw_flg&IP_FW_F_TCPSYN && notcpsyn)
|
||||
continue;
|
||||
|
||||
/*
|
||||
@ -264,10 +264,10 @@ struct ip_fw *chain;
|
||||
if (prt==f_prt) {
|
||||
|
||||
if (prt==IP_FW_F_ICMP ||
|
||||
(port_match(&f->ports[0],f->n_src_p,src_port,
|
||||
f->flags&IP_FW_F_SRNG) &&
|
||||
port_match(&f->ports[f->n_src_p],f->n_dst_p,dst_port,
|
||||
f->flags&IP_FW_F_DRNG))) {
|
||||
(port_match(&f->fw_pts[0],f->fw_nsp,src_port,
|
||||
f->fw_flg&IP_FW_F_SRNG) &&
|
||||
port_match(&f->fw_pts[f->fw_nsp],f->fw_ndp,dst_port,
|
||||
f->fw_flg&IP_FW_F_DRNG))) {
|
||||
goto got_match;
|
||||
} /* Ports match */
|
||||
} /* Proto matches */
|
||||
@ -291,8 +291,8 @@ struct ip_fw *chain;
|
||||
* VERY ugly piece of code which actually
|
||||
* makes kernel printf for denied packets...
|
||||
*/
|
||||
if (f->flags&IP_FW_F_PRN) {
|
||||
if (f->flags&IP_FW_F_ACCEPT)
|
||||
if (f->fw_flg&IP_FW_F_PRN) {
|
||||
if (f->fw_flg&IP_FW_F_ACCEPT)
|
||||
printf("Accept ");
|
||||
else
|
||||
printf("Deny ");
|
||||
@ -320,7 +320,7 @@ struct ip_fw *chain;
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
if (f->flags&IP_FW_F_ACCEPT)
|
||||
if (f->fw_flg&IP_FW_F_ACCEPT)
|
||||
goto good_packet;
|
||||
#ifdef noneed
|
||||
else
|
||||
@ -340,7 +340,7 @@ struct ip_fw *chain;
|
||||
* by entry with this flag
|
||||
* set only.
|
||||
*/
|
||||
if (!(f->flags&IP_FW_F_ICMPRPL))
|
||||
if (!(f->fw_flg&IP_FW_F_ICMPRPL))
|
||||
return 0;
|
||||
m = m_get(M_DONTWAIT, MT_SOOPTS);
|
||||
/*
|
||||
@ -419,28 +419,28 @@ int nh_conv;
|
||||
break;
|
||||
}
|
||||
|
||||
for (f=chain;f;f=f->next) {
|
||||
if ((src.s_addr&f->src_mask.s_addr)==f->src.s_addr
|
||||
&& (dst.s_addr&f->dst_mask.s_addr)==f->dst.s_addr) {
|
||||
for (f=chain;f;f=f->fw_next) {
|
||||
if ((src.s_addr&f->fw_smsk.s_addr)==f->fw_src.s_addr
|
||||
&& (dst.s_addr&f->fw_dmsk.s_addr)==f->fw_dst.s_addr) {
|
||||
rev=0;
|
||||
goto addr_match;
|
||||
}
|
||||
if ((f->flags&IP_FW_F_BIDIR) &&
|
||||
((src.s_addr&f->src_mask.s_addr)==f->dst.s_addr
|
||||
&& (dst.s_addr&f->dst_mask.s_addr)==f->src.s_addr)) {
|
||||
if ((f->fw_flg&IP_FW_F_BIDIR) &&
|
||||
((src.s_addr&f->fw_smsk.s_addr)==f->fw_dst.s_addr
|
||||
&& (dst.s_addr&f->fw_dmsk.s_addr)==f->fw_src.s_addr)) {
|
||||
rev=1;
|
||||
goto addr_match;
|
||||
}
|
||||
continue;
|
||||
addr_match:
|
||||
if (f->via.s_addr && rif) {
|
||||
if (f->fw_via.s_addr && rif) {
|
||||
for (ia_p=ia;ia_p;ia_p=ia_p->ifa_next) {
|
||||
if (!ia_p->ifa_addr ||
|
||||
ia_p->ifa_addr->sa_family!=AF_INET)
|
||||
continue;
|
||||
ia_i.s_addr=(((struct sockaddr_in *)\
|
||||
(ia_p->ifa_addr))->sin_addr.s_addr);
|
||||
if (ia_i.s_addr==f->via.s_addr)
|
||||
if (ia_i.s_addr==f->fw_via.s_addr)
|
||||
goto via_match;
|
||||
}
|
||||
continue;
|
||||
@ -449,11 +449,11 @@ int nh_conv;
|
||||
}
|
||||
continue;
|
||||
via_match:
|
||||
f_prt=f->flags&IP_FW_F_KIND;
|
||||
f_prt=f->fw_flg&IP_FW_F_KIND;
|
||||
if (f_prt==IP_FW_F_ALL) {
|
||||
/* Universal frwl - we've got a match! */
|
||||
|
||||
f->p_cnt++; /* Rise packet count */
|
||||
f->fw_pcnt++; /* Rise packet count */
|
||||
|
||||
/*
|
||||
* Rise byte count,
|
||||
@ -462,9 +462,9 @@ int nh_conv;
|
||||
* order,do it.
|
||||
*/
|
||||
if (nh_conv)
|
||||
f->b_cnt+=ntohs(ip->ip_len);
|
||||
f->fw_bcnt+=ntohs(ip->ip_len);
|
||||
else
|
||||
f->b_cnt+=ip->ip_len;
|
||||
f->fw_bcnt+=ip->ip_len;
|
||||
} else {
|
||||
/*
|
||||
* Specific firewall - packet's
|
||||
@ -473,17 +473,17 @@ int nh_conv;
|
||||
if (prt==f_prt) {
|
||||
|
||||
if ((prt==IP_FW_F_ICMP ||
|
||||
(port_match(&f->ports[0],f->n_src_p,src_port,
|
||||
f->flags&IP_FW_F_SRNG) &&
|
||||
port_match(&f->ports[f->n_src_p],f->n_dst_p,dst_port,
|
||||
f->flags&IP_FW_F_DRNG)))
|
||||
(port_match(&f->fw_pts[0],f->fw_nsp,src_port,
|
||||
f->fw_flg&IP_FW_F_SRNG) &&
|
||||
port_match(&f->fw_pts[f->fw_nsp],f->fw_ndp,dst_port,
|
||||
f->fw_flg&IP_FW_F_DRNG)))
|
||||
|| ((rev)
|
||||
&& (port_match(&f->ports[0],f->n_src_p,dst_port,
|
||||
f->flags&IP_FW_F_SRNG)
|
||||
&& port_match(&f->ports[f->n_src_p],f->n_dst_p,src_port,
|
||||
f->flags&IP_FW_F_DRNG))))
|
||||
&& (port_match(&f->fw_pts[0],f->fw_nsp,dst_port,
|
||||
f->fw_flg&IP_FW_F_SRNG)
|
||||
&& port_match(&f->fw_pts[f->fw_nsp],f->fw_ndp,src_port,
|
||||
f->fw_flg&IP_FW_F_DRNG))))
|
||||
{
|
||||
f->p_cnt++; /* Rise packet count */
|
||||
f->fw_pcnt++; /* Rise packet count */
|
||||
/*
|
||||
* Rise byte count,
|
||||
* if need to convert from
|
||||
@ -491,9 +491,9 @@ int nh_conv;
|
||||
* order,do it.
|
||||
*/
|
||||
if (nh_conv)
|
||||
f->b_cnt+=ntohs(ip->ip_len);
|
||||
f->fw_bcnt+=ntohs(ip->ip_len);
|
||||
else
|
||||
f->b_cnt+=ip->ip_len;
|
||||
f->fw_bcnt+=ip->ip_len;
|
||||
} /* Ports match */
|
||||
} /* Proto matches */
|
||||
} /* ALL/Specific */
|
||||
@ -508,9 +508,9 @@ struct ip_fw *chainptr;
|
||||
{
|
||||
struct ip_fw *ctmp=chainptr;
|
||||
while(ctmp) {
|
||||
ctmp->p_cnt=0l;
|
||||
ctmp->b_cnt=0l;
|
||||
ctmp=ctmp->next;
|
||||
ctmp->fw_pcnt=0l;
|
||||
ctmp->fw_bcnt=0l;
|
||||
ctmp=ctmp->fw_next;
|
||||
}
|
||||
}
|
||||
|
||||
@ -523,7 +523,7 @@ int s=splnet();
|
||||
while (*chainptr) {
|
||||
struct ip_fw *ftmp;
|
||||
ftmp = *chainptr;
|
||||
*chainptr = ftmp->next;
|
||||
*chainptr = ftmp->fw_next;
|
||||
free(ftmp,M_SOOPTS);
|
||||
}
|
||||
splx(s);
|
||||
@ -554,10 +554,10 @@ struct ip_fw *frwl;
|
||||
}
|
||||
|
||||
bcopy(frwl,ftmp,sizeof(struct ip_fw));
|
||||
ftmp->p_cnt=0L;
|
||||
ftmp->b_cnt=0L;
|
||||
ftmp->fw_pcnt=0L;
|
||||
ftmp->fw_bcnt=0L;
|
||||
|
||||
ftmp->next = NULL;
|
||||
ftmp->fw_next = NULL;
|
||||
|
||||
if (*chainptr==NULL)
|
||||
{
|
||||
@ -566,12 +566,12 @@ struct ip_fw *frwl;
|
||||
else
|
||||
{
|
||||
chtmp_prev=NULL;
|
||||
for (chtmp=*chainptr;chtmp!=NULL;chtmp=chtmp->next) {
|
||||
for (chtmp=*chainptr;chtmp!=NULL;chtmp=chtmp->fw_next) {
|
||||
|
||||
addb4=0;
|
||||
|
||||
newkind=ftmp->flags & IP_FW_F_KIND;
|
||||
oldkind=chtmp->flags & IP_FW_F_KIND;
|
||||
newkind=ftmp->fw_flg & IP_FW_F_KIND;
|
||||
oldkind=chtmp->fw_flg & IP_FW_F_KIND;
|
||||
|
||||
if (newkind!=IP_FW_F_ALL
|
||||
&& oldkind!=IP_FW_F_ALL
|
||||
@ -583,15 +583,15 @@ struct ip_fw *frwl;
|
||||
* Very very *UGLY* code...
|
||||
* Sorry,but i had to do this....
|
||||
*/
|
||||
n_sa=ntohl(ftmp->src.s_addr);
|
||||
n_da=ntohl(ftmp->dst.s_addr);
|
||||
n_sm=ntohl(ftmp->src_mask.s_addr);
|
||||
n_dm=ntohl(ftmp->dst_mask.s_addr);
|
||||
n_sa=ntohl(ftmp->fw_src.s_addr);
|
||||
n_da=ntohl(ftmp->fw_dst.s_addr);
|
||||
n_sm=ntohl(ftmp->fw_smsk.s_addr);
|
||||
n_dm=ntohl(ftmp->fw_dmsk.s_addr);
|
||||
|
||||
o_sa=ntohl(chtmp->src.s_addr);
|
||||
o_da=ntohl(chtmp->dst.s_addr);
|
||||
o_sm=ntohl(chtmp->src_mask.s_addr);
|
||||
o_dm=ntohl(chtmp->dst_mask.s_addr);
|
||||
o_sa=ntohl(chtmp->fw_src.s_addr);
|
||||
o_da=ntohl(chtmp->fw_dst.s_addr);
|
||||
o_sm=ntohl(chtmp->fw_smsk.s_addr);
|
||||
o_dm=ntohl(chtmp->fw_dmsk.s_addr);
|
||||
|
||||
m_src_mask = o_sm & n_sm;
|
||||
m_dst_mask = o_dm & n_dm;
|
||||
@ -630,25 +630,25 @@ struct ip_fw *frwl;
|
||||
* of ports.
|
||||
*/
|
||||
|
||||
if (ftmp->flags & IP_FW_F_SRNG)
|
||||
n_sr=ftmp->ports[1]-ftmp->ports[0];
|
||||
if (ftmp->fw_flg & IP_FW_F_SRNG)
|
||||
n_sr=ftmp->fw_pts[1]-ftmp->fw_pts[0];
|
||||
else
|
||||
n_sr=(ftmp->n_src_p)?
|
||||
ftmp->n_src_p : USHRT_MAX;
|
||||
n_sr=(ftmp->fw_nsp)?
|
||||
ftmp->fw_nsp : USHRT_MAX;
|
||||
|
||||
if (chtmp->flags & IP_FW_F_SRNG)
|
||||
o_sr=chtmp->ports[1]-chtmp->ports[0];
|
||||
if (chtmp->fw_flg & IP_FW_F_SRNG)
|
||||
o_sr=chtmp->fw_pts[1]-chtmp->fw_pts[0];
|
||||
else
|
||||
o_sr=(chtmp->n_src_p)?
|
||||
chtmp->n_src_p : USHRT_MAX;
|
||||
o_sr=(chtmp->fw_nsp)?
|
||||
chtmp->fw_nsp : USHRT_MAX;
|
||||
|
||||
if (n_sr<o_sr)
|
||||
addb4++;
|
||||
if (n_sr>o_sr)
|
||||
addb4--;
|
||||
|
||||
n_n=ftmp->n_src_p;
|
||||
n_o=chtmp->n_src_p;
|
||||
n_n=ftmp->fw_nsp;
|
||||
n_o=chtmp->fw_nsp;
|
||||
/*
|
||||
* Actually this cannot happen as the frwl control
|
||||
* procedure checks for number of ports in source and
|
||||
@ -658,17 +658,17 @@ struct ip_fw *frwl;
|
||||
(n_o>(IP_FW_MAX_PORTS-2)))
|
||||
goto skip_check;
|
||||
|
||||
if (ftmp->flags & IP_FW_F_DRNG)
|
||||
n_dr=ftmp->ports[n_n+1]-ftmp->ports[n_n];
|
||||
if (ftmp->fw_flg & IP_FW_F_DRNG)
|
||||
n_dr=ftmp->fw_pts[n_n+1]-ftmp->fw_pts[n_n];
|
||||
else
|
||||
n_dr=(ftmp->n_dst_p)?
|
||||
ftmp->n_dst_p : USHRT_MAX;
|
||||
n_dr=(ftmp->fw_ndp)?
|
||||
ftmp->fw_ndp : USHRT_MAX;
|
||||
|
||||
if (chtmp->flags & IP_FW_F_DRNG)
|
||||
o_dr=chtmp->ports[n_o+1]-chtmp->ports[n_o];
|
||||
if (chtmp->fw_flg & IP_FW_F_DRNG)
|
||||
o_dr=chtmp->fw_pts[n_o+1]-chtmp->fw_pts[n_o];
|
||||
else
|
||||
o_dr=(chtmp->n_dst_p)?
|
||||
chtmp->n_dst_p : USHRT_MAX;
|
||||
o_dr=(chtmp->fw_ndp)?
|
||||
chtmp->fw_ndp : USHRT_MAX;
|
||||
if (n_dr<o_dr)
|
||||
addb4++;
|
||||
if (n_dr>o_dr)
|
||||
@ -679,11 +679,11 @@ struct ip_fw *frwl;
|
||||
}
|
||||
if (addb4>0) {
|
||||
if (chtmp_prev) {
|
||||
chtmp_prev->next=ftmp;
|
||||
ftmp->next=chtmp;
|
||||
chtmp_prev->fw_next=ftmp;
|
||||
ftmp->fw_next=chtmp;
|
||||
} else {
|
||||
*chainptr=ftmp;
|
||||
ftmp->next=chtmp;
|
||||
ftmp->fw_next=chtmp;
|
||||
}
|
||||
splx(s);
|
||||
return 0;
|
||||
@ -691,7 +691,7 @@ struct ip_fw *frwl;
|
||||
chtmp_prev=chtmp;
|
||||
}
|
||||
if (chtmp_prev)
|
||||
chtmp_prev->next=ftmp;
|
||||
chtmp_prev->fw_next=ftmp;
|
||||
else
|
||||
#ifdef DIAGNOSTICS
|
||||
panic("Can't happen");
|
||||
@ -728,22 +728,22 @@ struct ip_fw *frwl;
|
||||
while(ftmp)
|
||||
{
|
||||
matches=1;
|
||||
if (ftmp->src.s_addr!=frwl->src.s_addr
|
||||
|| ftmp->dst.s_addr!=frwl->dst.s_addr
|
||||
|| ftmp->src_mask.s_addr!=frwl->src_mask.s_addr
|
||||
|| ftmp->dst_mask.s_addr!=frwl->dst_mask.s_addr
|
||||
|| ftmp->via.s_addr!=frwl->via.s_addr
|
||||
|| ftmp->flags!=frwl->flags)
|
||||
if (ftmp->fw_src.s_addr!=frwl->fw_src.s_addr
|
||||
|| ftmp->fw_dst.s_addr!=frwl->fw_dst.s_addr
|
||||
|| ftmp->fw_smsk.s_addr!=frwl->fw_smsk.s_addr
|
||||
|| ftmp->fw_dmsk.s_addr!=frwl->fw_dmsk.s_addr
|
||||
|| ftmp->fw_via.s_addr!=frwl->fw_via.s_addr
|
||||
|| ftmp->fw_flg!=frwl->fw_flg)
|
||||
matches=0;
|
||||
tport1=ftmp->n_src_p+ftmp->n_dst_p;
|
||||
tport2=frwl->n_src_p+frwl->n_dst_p;
|
||||
tport1=ftmp->fw_nsp+ftmp->fw_ndp;
|
||||
tport2=frwl->fw_nsp+frwl->fw_ndp;
|
||||
if (tport1!=tport2)
|
||||
matches=0;
|
||||
else
|
||||
if (tport1!=0)
|
||||
{
|
||||
for (tmpnum=0;tmpnum < tport1 && tmpnum < IP_FW_MAX_PORTS;tmpnum++)
|
||||
if (ftmp->ports[tmpnum]!=frwl->ports[tmpnum])
|
||||
if (ftmp->fw_pts[tmpnum]!=frwl->fw_pts[tmpnum])
|
||||
matches=0;
|
||||
}
|
||||
if(matches)
|
||||
@ -751,13 +751,13 @@ struct ip_fw *frwl;
|
||||
was_found=1;
|
||||
if (ltmp)
|
||||
{
|
||||
ltmp->next=ftmp->next;
|
||||
ltmp->fw_next=ftmp->fw_next;
|
||||
free(ftmp,M_SOOPTS);
|
||||
ftmp=ltmp->next;
|
||||
ftmp=ltmp->fw_next;
|
||||
}
|
||||
else
|
||||
{
|
||||
*chainptr=ftmp->next;
|
||||
*chainptr=ftmp->fw_next;
|
||||
free(ftmp,M_SOOPTS);
|
||||
ftmp=*chainptr;
|
||||
}
|
||||
@ -766,7 +766,7 @@ struct ip_fw *frwl;
|
||||
else
|
||||
{
|
||||
ltmp = ftmp;
|
||||
ftmp = ftmp->next;
|
||||
ftmp = ftmp->fw_next;
|
||||
}
|
||||
}
|
||||
splx(s);
|
||||
@ -774,6 +774,58 @@ struct ip_fw *frwl;
|
||||
else return(EINVAL);
|
||||
}
|
||||
|
||||
static
|
||||
int
|
||||
clr_entry(chainptr,frwl)
|
||||
struct ip_fw **chainptr;
|
||||
struct ip_fw *frwl;
|
||||
{
|
||||
struct ip_fw *ftmp,*ltmp;
|
||||
u_short tport1,tport2,tmpnum;
|
||||
char matches,was_found;
|
||||
|
||||
ftmp=*chainptr;
|
||||
|
||||
if (ftmp == NULL) {
|
||||
dprintf1("ip_fw_ctl: chain is empty\n");
|
||||
return(EINVAL);
|
||||
}
|
||||
|
||||
was_found=0;
|
||||
|
||||
while(ftmp)
|
||||
{
|
||||
matches=1;
|
||||
if (ftmp->fw_src.s_addr!=frwl->fw_src.s_addr
|
||||
|| ftmp->fw_dst.s_addr!=frwl->fw_dst.s_addr
|
||||
|| ftmp->fw_smsk.s_addr!=frwl->fw_smsk.s_addr
|
||||
|| ftmp->fw_dmsk.s_addr!=frwl->fw_dmsk.s_addr
|
||||
|| ftmp->fw_via.s_addr!=frwl->fw_via.s_addr
|
||||
|| ftmp->fw_flg!=frwl->fw_flg)
|
||||
matches=0;
|
||||
tport1=ftmp->fw_nsp+ftmp->fw_ndp;
|
||||
tport2=frwl->fw_nsp+frwl->fw_ndp;
|
||||
if (tport1!=tport2)
|
||||
matches=0;
|
||||
else
|
||||
if (tport1!=0)
|
||||
{
|
||||
for (tmpnum=0;tmpnum < tport1 && tmpnum < IP_FW_MAX_PORTS;tmpnum++)
|
||||
if (ftmp->fw_pts[tmpnum]!=frwl->fw_pts[tmpnum])
|
||||
matches=0;
|
||||
}
|
||||
if(matches)
|
||||
{
|
||||
was_found=1;
|
||||
ftmp->fw_pcnt=0L;
|
||||
ftmp->fw_bcnt=0L;
|
||||
}
|
||||
ftmp=ftmp->fw_next;
|
||||
}
|
||||
if (was_found) return 0;
|
||||
else return(EINVAL);
|
||||
}
|
||||
|
||||
struct ip_fw *
|
||||
check_ipfw_struct(m)
|
||||
struct mbuf *m;
|
||||
@ -788,32 +840,32 @@ struct ip_fw *frwl;
|
||||
|
||||
frwl = mtod(m,struct ip_fw*);
|
||||
|
||||
if ( (frwl->flags & ~IP_FW_F_MASK) != 0 ) {
|
||||
if ( (frwl->fw_flg & ~IP_FW_F_MASK) != 0 ) {
|
||||
dprintf2("ip_fw_ctl: undefined flag bits set (flags=%x)\n",
|
||||
frwl->flags);
|
||||
frwl->fw_flg);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
if ( (frwl->flags & IP_FW_F_SRNG) && frwl->n_src_p < 2 ) {
|
||||
if ( (frwl->fw_flg & IP_FW_F_SRNG) && frwl->fw_nsp < 2 ) {
|
||||
dprintf2("ip_fw_ctl: src range set but n_src_p=%d\n",
|
||||
frwl->n_src_p);
|
||||
frwl->fw_nsp);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
if ( (frwl->flags & IP_FW_F_DRNG) && frwl->n_dst_p < 2 ) {
|
||||
if ( (frwl->fw_flg & IP_FW_F_DRNG) && frwl->fw_ndp < 2 ) {
|
||||
dprintf2("ip_fw_ctl: dst range set but n_dst_p=%d\n",
|
||||
frwl->n_dst_p);
|
||||
frwl->fw_ndp);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
if ( frwl->n_src_p + frwl->n_dst_p > IP_FW_MAX_PORTS ) {
|
||||
if ( frwl->fw_nsp + frwl->fw_ndp > IP_FW_MAX_PORTS ) {
|
||||
dprintf3("ip_fw_ctl: too many ports (%d+%d)\n",
|
||||
frwl->n_src_p,frwl->n_dst_p);
|
||||
frwl->fw_nsp,frwl->fw_ndp);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if ( (frwl->flags & IP_FW_F_KIND) == IP_FW_F_ICMP ) {
|
||||
if ( (frwl->fw_flg & IP_FW_F_KIND) == IP_FW_F_ICMP ) {
|
||||
dprintf1("ip_fw_ctl: request for unsupported ICMP frwling\n");
|
||||
return(NULL);
|
||||
}
|
||||
@ -842,6 +894,7 @@ if ( stage == IP_ACCT_ZERO )
|
||||
}
|
||||
if ( stage == IP_ACCT_ADD
|
||||
|| stage == IP_ACCT_DEL
|
||||
|| stage == IP_ACCT_CLR
|
||||
) {
|
||||
|
||||
struct ip_fw *frwl;
|
||||
@ -854,12 +907,15 @@ if ( stage == IP_ACCT_ADD
|
||||
return( add_entry(&ip_acct_chain,frwl));
|
||||
case IP_ACCT_DEL:
|
||||
return( del_entry(&ip_acct_chain,frwl));
|
||||
case IP_ACCT_CLR:
|
||||
return( clr_entry(&ip_acct_chain,frwl));
|
||||
default:
|
||||
/*
|
||||
* Should be panic but...
|
||||
*/
|
||||
#ifdef DIAGNOSTICS
|
||||
panic("Can't happen");
|
||||
#else
|
||||
dprintf2("ip_acct_ctl: unknown request %d\n",stage);
|
||||
return(EINVAL);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
dprintf2("ip_acct_ctl: unknown request %d\n",stage);
|
||||
|
@ -15,26 +15,26 @@
|
||||
/*
|
||||
* Format of an IP firewall descriptor
|
||||
*
|
||||
* src, dst, src_mask, dst_mask are always stored in network byte order.
|
||||
* flags and num_*_ports are stored in host byte order (of course).
|
||||
* fw_src, fw_dst, fw_smsk, fw_dmsk are always stored in network byte order.
|
||||
* fw_flg and fw_n*p are stored in host byte order (of course).
|
||||
* Port numbers are stored in HOST byte order.
|
||||
*/
|
||||
#ifndef _IP_FW_H
|
||||
#define _IP_FW_H
|
||||
|
||||
struct ip_fw {
|
||||
struct ip_fw *next; /* Next firewall on chain */
|
||||
struct in_addr src, dst; /* Source and destination IP addr */
|
||||
struct in_addr src_mask, dst_mask; /* Mask for src and dest IP addr */
|
||||
struct in_addr via; /* IP addr of interface "via" */
|
||||
u_short flags; /* Flags word */
|
||||
u_short n_src_p, n_dst_p; /* # of src ports and # of dst ports */
|
||||
struct ip_fw *fw_next; /* Next firewall on chain */
|
||||
struct in_addr fw_src, fw_dst; /* Source and destination IP addr */
|
||||
struct in_addr fw_smsk, fw_dmsk; /* Mask for src and dest IP addr */
|
||||
struct in_addr fw_via; /* IP addr of interface "via" */
|
||||
u_short fw_flg; /* Flags word */
|
||||
u_short fw_nsp, fw_ndp; /* N'of src ports and # of dst ports */
|
||||
/* in ports array (dst ports follow */
|
||||
/* src ports; max of 10 ports in all; */
|
||||
/* count of 0 means match all ports) */
|
||||
#define IP_FW_MAX_PORTS 10 /* A reasonable maximum */
|
||||
u_short ports[IP_FW_MAX_PORTS]; /* Array of port numbers to match */
|
||||
u_long p_cnt,b_cnt; /* Packet and byte counters */
|
||||
u_short fw_pts[IP_FW_MAX_PORTS]; /* Array of port numbers to match */
|
||||
u_long fw_pcnt,fw_bcnt; /* Packet and byte counters */
|
||||
};
|
||||
|
||||
/*
|
||||
@ -80,6 +80,7 @@ struct ip_fw {
|
||||
#define IP_ACCT_DEL (IP_FW_BASE_CTL+11)
|
||||
#define IP_ACCT_FLUSH (IP_FW_BASE_CTL+12)
|
||||
#define IP_ACCT_ZERO (IP_FW_BASE_CTL+13)
|
||||
#define IP_ACCT_CLR (IP_FW_BASE_CTL+14)
|
||||
|
||||
/*
|
||||
* Policy flags...
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)raw_ip.c 8.2 (Berkeley) 1/4/94
|
||||
* $Id: raw_ip.c,v 1.8 1994/11/16 10:17:11 jkh Exp $
|
||||
* $Id: raw_ip.c,v 1.9 1994/12/12 17:20:55 ugen Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -231,6 +231,7 @@ rip_ctloutput(op, so, level, optname, m)
|
||||
#ifdef IPACCT
|
||||
case IP_ACCT_DEL:
|
||||
case IP_ACCT_ADD:
|
||||
case IP_ACCT_CLR:
|
||||
case IP_ACCT_FLUSH:
|
||||
case IP_ACCT_ZERO:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user