• Main Page
  • Modules
  • Data Structures
  • Files
  • File List

snprintf_default.c

00001 /*
00002  * (C) 2006-2007 by Pablo Neira Ayuso <pablo@netfilter.org>
00003  *
00004  * This software may be used and distributed according to the terms
00005  * of the GNU General Public License, incorporated herein by reference.
00006  */
00007 
00008 #include "internal/internal.h"
00009 
00010 static int __snprintf_expect_proto(char *buf, 
00011                                    unsigned int len,
00012                                    const struct nf_expect *exp)
00013 {
00014          return(snprintf(buf, len, "%u proto=%d ", 
00015                          exp->timeout, 
00016                          exp->expected.tuple[__DIR_ORIG].protonum));
00017 }
00018 
00019 int __snprintf_expect_default(char *buf, 
00020                               unsigned int len,
00021                               const struct nf_expect *exp,
00022                               unsigned int msg_type,
00023                               unsigned int flags) 
00024 {
00025         int ret = 0, size = 0, offset = 0;
00026         const char *delim = "";
00027 
00028         switch(msg_type) {
00029                 case NFCT_T_NEW:
00030                         ret = snprintf(buf, len, "%9s ", "[NEW]");
00031                         break;
00032                 case NFCT_T_UPDATE:
00033                         ret = snprintf(buf, len, "%9s ", "[UPDATE]");
00034                         break;
00035                 case NFCT_T_DESTROY:
00036                         ret = snprintf(buf, len, "%9s ", "[DESTROY]");
00037                         break;
00038                 default:
00039                         break;
00040         }
00041 
00042         BUFFER_SIZE(ret, size, len, offset);
00043 
00044         ret = __snprintf_expect_proto(buf+offset, len, exp);
00045         BUFFER_SIZE(ret, size, len, offset);
00046 
00047         ret = __snprintf_address(buf+offset, len, &exp->expected.tuple[__DIR_ORIG]);
00048         BUFFER_SIZE(ret, size, len, offset);
00049 
00050         ret = __snprintf_proto(buf+offset, len, &exp->expected.tuple[__DIR_ORIG]);
00051         BUFFER_SIZE(ret, size, len, offset);
00052 
00053         if (test_bit(ATTR_EXP_ZONE, exp->set)) {
00054                 ret = snprintf(buf+offset, len, "zone=%u ", exp->zone);
00055                 BUFFER_SIZE(ret, size, len, offset);
00056         }
00057 
00058         if (exp->flags & NF_CT_EXPECT_PERMANENT) {
00059                 ret = snprintf(buf+offset, len, "PERMANENT");
00060                 BUFFER_SIZE(ret, size, len, offset);
00061                 delim = ",";
00062         }
00063         if (exp->flags & NF_CT_EXPECT_INACTIVE) {
00064                 ret = snprintf(buf+offset, len, "%sINACTIVE", delim);
00065                 BUFFER_SIZE(ret, size, len, offset);
00066                 delim = ",";
00067         }
00068         if (exp->flags & NF_CT_EXPECT_USERSPACE) {
00069                 ret = snprintf(buf+offset, len, "%sUSERSPACE", delim);
00070                 BUFFER_SIZE(ret, size, len, offset);
00071         }
00072 
00073         /* Delete the last blank space if needed */
00074         if (len > 0 && buf[size-1] == ' ')
00075                 size--;
00076 
00077         return size;
00078 }

Generated on Wed Jan 26 2011 23:11:37 for libnetfilter_conntrack by  doxygen 1.7.1