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

copy.c

00001 /*
00002  * (C) 2008 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 void copy_attr_orig_ipv4_src(struct nf_conntrack *dest,
00011                                     const struct nf_conntrack *orig)
00012 {
00013         dest->tuple[__DIR_ORIG].src.v4 = orig->tuple[__DIR_ORIG].src.v4;
00014 }
00015 
00016 static void copy_attr_orig_ipv4_dst(struct nf_conntrack *dest,
00017                                     const struct nf_conntrack *orig)
00018 {
00019         dest->tuple[__DIR_ORIG].dst.v4 = orig->tuple[__DIR_ORIG].dst.v4;
00020 }
00021 
00022 static void copy_attr_repl_ipv4_src(struct nf_conntrack *dest,
00023                                     const struct nf_conntrack *orig)
00024 {
00025         dest->tuple[__DIR_REPL].src.v4 = orig->tuple[__DIR_REPL].src.v4;
00026 }
00027 
00028 static void copy_attr_repl_ipv4_dst(struct nf_conntrack *dest,
00029                                     const struct nf_conntrack *orig)
00030 {
00031         dest->tuple[__DIR_REPL].dst.v4 = orig->tuple[__DIR_REPL].dst.v4;
00032 }
00033 
00034 static void copy_attr_orig_ipv6_src(struct nf_conntrack *dest,
00035                                     const struct nf_conntrack *orig)
00036 {
00037         memcpy(&dest->tuple[__DIR_ORIG].src,
00038                &orig->tuple[__DIR_ORIG].src,
00039                sizeof(union __nfct_address));
00040 }
00041 
00042 static void copy_attr_orig_ipv6_dst(struct nf_conntrack *dest,
00043                                     const struct nf_conntrack *orig)
00044 {
00045         memcpy(&dest->tuple[__DIR_ORIG].dst,
00046                &orig->tuple[__DIR_ORIG].dst,
00047                sizeof(union __nfct_address));
00048 }
00049 
00050 static void copy_attr_repl_ipv6_src(struct nf_conntrack *dest,
00051                                     const struct nf_conntrack *orig)
00052 {
00053         memcpy(&dest->tuple[__DIR_REPL].src,
00054                &orig->tuple[__DIR_REPL].src,
00055                sizeof(union __nfct_address));
00056 }
00057 
00058 static void copy_attr_repl_ipv6_dst(struct nf_conntrack *dest,
00059                                     const struct nf_conntrack *orig)
00060 {
00061         memcpy(&dest->tuple[__DIR_REPL].dst,
00062                &orig->tuple[__DIR_REPL].dst,
00063                sizeof(union __nfct_address));
00064 }
00065 
00066 static void copy_attr_orig_port_src(struct nf_conntrack *dest,
00067                                     const struct nf_conntrack *orig)
00068 {
00069         dest->tuple[__DIR_ORIG].l4src.all = orig->tuple[__DIR_ORIG].l4src.all;
00070 }
00071 
00072 static void copy_attr_orig_port_dst(struct nf_conntrack *dest,
00073                                     const struct nf_conntrack *orig)
00074 {
00075         dest->tuple[__DIR_ORIG].l4dst.all = orig->tuple[__DIR_ORIG].l4dst.all;
00076 }
00077 
00078 static void copy_attr_repl_port_src(struct nf_conntrack *dest,
00079                                     const struct nf_conntrack *orig)
00080 {
00081         dest->tuple[__DIR_REPL].l4src.all = orig->tuple[__DIR_REPL].l4src.all;
00082 }
00083 
00084 static void copy_attr_repl_port_dst(struct nf_conntrack *dest,
00085                                     const struct nf_conntrack *orig)
00086 {
00087         dest->tuple[__DIR_REPL].l4dst.all = orig->tuple[__DIR_REPL].l4dst.all;
00088 }
00089 
00090 static void copy_attr_icmp_type(struct nf_conntrack *dest,
00091                                 const struct nf_conntrack *orig)
00092 {
00093         dest->tuple[__DIR_ORIG].l4dst.icmp.type = 
00094                 orig->tuple[__DIR_ORIG].l4dst.icmp.type;
00095 
00096 }
00097 
00098 static void copy_attr_icmp_code(struct nf_conntrack *dest,
00099                                 const struct nf_conntrack *orig)
00100 {
00101         dest->tuple[__DIR_ORIG].l4dst.icmp.code = 
00102                 orig->tuple[__DIR_ORIG].l4dst.icmp.code;
00103 
00104 }
00105 
00106 static void copy_attr_icmp_id(struct nf_conntrack *dest,
00107                               const struct nf_conntrack *orig)
00108 {
00109         dest->tuple[__DIR_ORIG].l4src.icmp.id = 
00110                 orig->tuple[__DIR_ORIG].l4src.icmp.id;
00111 }
00112 
00113 static void copy_attr_orig_l3proto(struct nf_conntrack *dest,
00114                                    const struct nf_conntrack *orig)
00115 {
00116         dest->tuple[__DIR_ORIG].l3protonum = orig->tuple[__DIR_ORIG].l3protonum;
00117 }
00118 
00119 static void copy_attr_repl_l3proto(struct nf_conntrack *dest,
00120                                    const struct nf_conntrack *orig)
00121 {
00122         dest->tuple[__DIR_REPL].l3protonum = orig->tuple[__DIR_REPL].l3protonum;
00123 }
00124 
00125 static void copy_attr_orig_l4proto(struct nf_conntrack *dest,
00126                                    const struct nf_conntrack *orig)
00127 {
00128         dest->tuple[__DIR_ORIG].protonum = orig->tuple[__DIR_ORIG].protonum;
00129 }
00130 
00131 static void copy_attr_repl_l4proto(struct nf_conntrack *dest,
00132                                    const struct nf_conntrack *orig)
00133 {
00134         dest->tuple[__DIR_REPL].protonum = orig->tuple[__DIR_REPL].protonum;
00135 }
00136 
00137 static void copy_attr_master_ipv4_src(struct nf_conntrack *dest,
00138                                       const struct nf_conntrack *orig)
00139 {
00140         dest->tuple[__DIR_MASTER].src.v4 = orig->tuple[__DIR_MASTER].src.v4;
00141 }
00142 
00143 static void copy_attr_master_ipv4_dst(struct nf_conntrack *dest,
00144                                       const struct nf_conntrack *orig)
00145 {
00146         dest->tuple[__DIR_MASTER].dst.v4 = orig->tuple[__DIR_MASTER].dst.v4;
00147 }
00148 
00149 static void copy_attr_master_ipv6_src(struct nf_conntrack *dest,
00150                                       const struct nf_conntrack *orig)
00151 {
00152         memcpy(&dest->tuple[__DIR_MASTER].src,
00153                &orig->tuple[__DIR_MASTER].src,
00154                sizeof(union __nfct_address));
00155 }
00156 
00157 static void copy_attr_master_ipv6_dst(struct nf_conntrack *dest,
00158                                       const struct nf_conntrack *orig)
00159 {
00160         memcpy(&dest->tuple[__DIR_MASTER].dst,
00161                &orig->tuple[__DIR_MASTER].dst,
00162                sizeof(union __nfct_address));
00163 }
00164 
00165 static void copy_attr_master_port_src(struct nf_conntrack *dest,
00166                                       const struct nf_conntrack *orig)
00167 {
00168         dest->tuple[__DIR_MASTER].l4src.all =
00169                 orig->tuple[__DIR_MASTER].l4src.all;
00170 }
00171 
00172 static void copy_attr_master_port_dst(struct nf_conntrack *dest,
00173                                       const struct nf_conntrack *orig)
00174 {
00175         dest->tuple[__DIR_MASTER].l4dst.all =
00176                 orig->tuple[__DIR_MASTER].l4dst.all;
00177 }
00178 
00179 static void copy_attr_master_l3proto(struct nf_conntrack *dest,
00180                                      const struct nf_conntrack *orig)
00181 {
00182         dest->tuple[__DIR_MASTER].l3protonum =
00183                 orig->tuple[__DIR_MASTER].l3protonum;
00184 }
00185 
00186 static void copy_attr_master_l4proto(struct nf_conntrack *dest,
00187                                      const struct nf_conntrack *orig)
00188 {
00189         dest->tuple[__DIR_MASTER].protonum =
00190                 orig->tuple[__DIR_MASTER].protonum;
00191 }
00192 
00193 static void copy_attr_tcp_state(struct nf_conntrack *dest,
00194                                 const struct nf_conntrack *orig)
00195 {
00196         dest->protoinfo.tcp.state = orig->protoinfo.tcp.state;
00197 }
00198 
00199 static void copy_attr_tcp_flags_orig(struct nf_conntrack *dest,
00200                                      const struct nf_conntrack *orig)
00201 {
00202         dest->protoinfo.tcp.flags[__DIR_ORIG].value =
00203                 orig->protoinfo.tcp.flags[__DIR_ORIG].value;
00204 }
00205 
00206 static void copy_attr_tcp_flags_repl(struct nf_conntrack *dest,
00207                                      const struct nf_conntrack *orig)
00208 {
00209         dest->protoinfo.tcp.flags[__DIR_REPL].value =
00210                 orig->protoinfo.tcp.flags[__DIR_REPL].value;
00211 }
00212 
00213 static void copy_attr_tcp_mask_orig(struct nf_conntrack *dest,
00214                                     const struct nf_conntrack *orig)
00215 {
00216         dest->protoinfo.tcp.flags[__DIR_ORIG].mask =
00217                 orig->protoinfo.tcp.flags[__DIR_ORIG].mask;
00218 }
00219 
00220 static void copy_attr_tcp_mask_repl(struct nf_conntrack *dest,
00221                                     const struct nf_conntrack *orig)
00222 {
00223         dest->protoinfo.tcp.flags[__DIR_REPL].mask =
00224                 orig->protoinfo.tcp.flags[__DIR_REPL].mask;
00225 }
00226 
00227 static void copy_attr_tcp_wscale_orig(struct nf_conntrack *dest,
00228                                       const struct nf_conntrack *orig)
00229 {
00230         dest->protoinfo.tcp.wscale[__DIR_ORIG] =
00231                 orig->protoinfo.tcp.wscale[__DIR_ORIG];
00232 }
00233 
00234 static void copy_attr_tcp_wscale_repl(struct nf_conntrack *dest,
00235                                       const struct nf_conntrack *orig)
00236 {
00237         dest->protoinfo.tcp.wscale[__DIR_REPL] =
00238                 orig->protoinfo.tcp.wscale[__DIR_REPL];
00239 }
00240 
00241 static void copy_attr_sctp_state(struct nf_conntrack *dest,
00242                                  const struct nf_conntrack *orig)
00243 {
00244         dest->protoinfo.sctp.state = orig->protoinfo.sctp.state;
00245 }
00246 
00247 static void copy_attr_sctp_vtag_orig(struct nf_conntrack *dest,
00248                                      const struct nf_conntrack *orig)
00249 {
00250         dest->protoinfo.sctp.vtag[__DIR_ORIG] =
00251                 orig->protoinfo.sctp.vtag[__DIR_ORIG];
00252 }
00253 
00254 static void copy_attr_sctp_vtag_repl(struct nf_conntrack *dest,
00255                                      const struct nf_conntrack *orig)
00256 {
00257         dest->protoinfo.sctp.vtag[__DIR_REPL] =
00258                 orig->protoinfo.sctp.vtag[__DIR_REPL];
00259 }
00260 
00261 static void copy_attr_dccp_state(struct nf_conntrack *dest,
00262                                  const struct nf_conntrack *orig)
00263 {
00264         dest->protoinfo.dccp.state = orig->protoinfo.dccp.state;
00265 }
00266 
00267 static void copy_attr_dccp_role(struct nf_conntrack *dest,
00268                                 const struct nf_conntrack *orig)
00269 {
00270         dest->protoinfo.dccp.role = orig->protoinfo.dccp.role;
00271 }
00272 
00273 static void copy_attr_dccp_handshake_seq(struct nf_conntrack *dest,
00274                                          const struct nf_conntrack *orig)
00275 {
00276         dest->protoinfo.dccp.handshake_seq = orig->protoinfo.dccp.handshake_seq;
00277 }
00278 
00279 static void copy_attr_snat_ipv4(struct nf_conntrack *dest,
00280                                 const struct nf_conntrack *orig)
00281 {
00282         dest->snat.min_ip = orig->snat.min_ip;
00283 }
00284 
00285 static void copy_attr_dnat_ipv4(struct nf_conntrack *dest,
00286                                 const struct nf_conntrack *orig)
00287 {
00288         dest->dnat.min_ip = orig->dnat.min_ip;
00289 }
00290 
00291 static void copy_attr_snat_port(struct nf_conntrack *dest,
00292                                 const struct nf_conntrack *orig)
00293 {
00294         dest->snat.l4min.all = orig->snat.l4min.all;
00295 }
00296 
00297 static void copy_attr_dnat_port(struct nf_conntrack *dest,
00298                                 const struct nf_conntrack *orig)
00299 {
00300         dest->dnat.l4min.all = orig->dnat.l4min.all;
00301 }
00302 
00303 static void copy_attr_timeout(struct nf_conntrack *dest,
00304                               const struct nf_conntrack *orig)
00305 {
00306         dest->timeout = orig->timeout;
00307 }
00308 
00309 static void copy_attr_mark(struct nf_conntrack *dest,
00310                            const struct nf_conntrack *orig)
00311 {
00312         dest->mark = orig->mark;
00313 }
00314 
00315 static void copy_attr_secmark(struct nf_conntrack *dest,
00316                               const struct nf_conntrack *orig)
00317 {
00318         dest->secmark = orig->secmark;
00319 }
00320 
00321 static void copy_attr_orig_counter_packets(struct nf_conntrack *dest,
00322                                            const struct nf_conntrack *orig)
00323 {
00324         dest->counters[__DIR_ORIG].packets = orig->counters[__DIR_ORIG].packets;
00325 }
00326 
00327 static void copy_attr_repl_counter_packets(struct nf_conntrack *dest,
00328                                            const struct nf_conntrack *orig)
00329 {
00330         dest->counters[__DIR_REPL].packets = orig->counters[__DIR_REPL].packets;
00331 }
00332 
00333 static void copy_attr_orig_counter_bytes(struct nf_conntrack *dest,
00334                                          const struct nf_conntrack *orig)
00335 {
00336         dest->counters[__DIR_ORIG].bytes = orig->counters[__DIR_ORIG].bytes;
00337 }
00338 
00339 static void copy_attr_repl_counter_bytes(struct nf_conntrack *dest,
00340                                          const struct nf_conntrack *orig)
00341 {
00342         dest->counters[__DIR_REPL].bytes = orig->counters[__DIR_REPL].bytes;
00343 }
00344 
00345 static void copy_attr_status(struct nf_conntrack *dest,
00346                              const struct nf_conntrack *orig)
00347 {
00348         dest->status = orig->status;
00349 }
00350 
00351 static void copy_attr_use(struct nf_conntrack *dest,
00352                           const struct nf_conntrack *orig)
00353 {
00354         dest->use = orig->use;
00355 }
00356 
00357 static void copy_attr_id(struct nf_conntrack *dest,
00358                          const struct nf_conntrack *orig)
00359 {
00360         dest->id = orig->id;
00361 }
00362 
00363 static void copy_attr_orig_cor_pos(struct nf_conntrack *dest,
00364                                    const struct nf_conntrack *orig)
00365 {
00366         dest->tuple[__DIR_ORIG].natseq.correction_pos =
00367                 orig->tuple[__DIR_ORIG].natseq.correction_pos;
00368 }
00369 
00370 static void copy_attr_orig_off_bfr(struct nf_conntrack *dest,
00371                                    const struct nf_conntrack *orig)
00372 {
00373         dest->tuple[__DIR_ORIG].natseq.offset_before =
00374                 orig->tuple[__DIR_ORIG].natseq.offset_before;
00375 }
00376 
00377 static void copy_attr_orig_off_aft(struct nf_conntrack *dest,
00378                                    const struct nf_conntrack *orig)
00379 {
00380         dest->tuple[__DIR_ORIG].natseq.offset_after =
00381                 orig->tuple[__DIR_ORIG].natseq.offset_after;
00382 }
00383 
00384 static void copy_attr_repl_cor_pos(struct nf_conntrack *dest,
00385                                    const struct nf_conntrack *orig)
00386 {
00387         dest->tuple[__DIR_REPL].natseq.correction_pos =
00388                 orig->tuple[__DIR_REPL].natseq.correction_pos;
00389 }
00390 
00391 static void copy_attr_repl_off_bfr(struct nf_conntrack *dest,
00392                                    const struct nf_conntrack *orig)
00393 {
00394         dest->tuple[__DIR_REPL].natseq.offset_before =
00395                 orig->tuple[__DIR_REPL].natseq.offset_before;
00396 }
00397 
00398 static void copy_attr_repl_off_aft(struct nf_conntrack *dest,
00399                                    const struct nf_conntrack *orig)
00400 {
00401         dest->tuple[__DIR_REPL].natseq.offset_after =
00402                 orig->tuple[__DIR_REPL].natseq.offset_after;
00403 }
00404 
00405 static void copy_attr_helper_name(struct nf_conntrack *dest,
00406                                   const struct nf_conntrack *orig)
00407 {
00408         strncpy(dest->helper_name, orig->helper_name, __NFCT_HELPER_NAMELEN);
00409         dest->helper_name[__NFCT_HELPER_NAMELEN-1] = '\0';
00410 }
00411 
00412 static void copy_attr_zone(struct nf_conntrack *dest,
00413                            const struct nf_conntrack *orig)
00414 {
00415         dest->zone = orig->zone;
00416 }
00417 
00418 static void copy_attr_secctx(struct nf_conntrack *dest,
00419                              const struct nf_conntrack *orig)
00420 {
00421         if (dest->secctx)
00422                 free(dest->secctx);
00423         dest->secctx = strdup(orig->secctx);
00424 }
00425 
00426 const copy_attr copy_attr_array[ATTR_MAX] = {
00427         [ATTR_ORIG_IPV4_SRC]            = copy_attr_orig_ipv4_src,
00428         [ATTR_ORIG_IPV4_DST]            = copy_attr_orig_ipv4_dst,
00429         [ATTR_REPL_IPV4_SRC]            = copy_attr_repl_ipv4_src,
00430         [ATTR_REPL_IPV4_DST]            = copy_attr_repl_ipv4_dst,
00431         [ATTR_ORIG_IPV6_SRC]            = copy_attr_orig_ipv6_src,
00432         [ATTR_ORIG_IPV6_DST]            = copy_attr_orig_ipv6_dst,
00433         [ATTR_REPL_IPV6_SRC]            = copy_attr_repl_ipv6_src,
00434         [ATTR_REPL_IPV6_DST]            = copy_attr_repl_ipv6_dst,
00435         [ATTR_ORIG_PORT_SRC]            = copy_attr_orig_port_src,
00436         [ATTR_ORIG_PORT_DST]            = copy_attr_orig_port_dst,
00437         [ATTR_REPL_PORT_SRC]            = copy_attr_repl_port_src,
00438         [ATTR_REPL_PORT_DST]            = copy_attr_repl_port_dst,
00439         [ATTR_ICMP_TYPE]                = copy_attr_icmp_type,
00440         [ATTR_ICMP_CODE]                = copy_attr_icmp_code,
00441         [ATTR_ICMP_ID]                  = copy_attr_icmp_id,
00442         [ATTR_ORIG_L3PROTO]             = copy_attr_orig_l3proto,
00443         [ATTR_REPL_L3PROTO]             = copy_attr_repl_l3proto,
00444         [ATTR_ORIG_L4PROTO]             = copy_attr_orig_l4proto,
00445         [ATTR_REPL_L4PROTO]             = copy_attr_repl_l4proto,
00446         [ATTR_TCP_STATE]                = copy_attr_tcp_state,
00447         [ATTR_SNAT_IPV4]                = copy_attr_snat_ipv4,
00448         [ATTR_DNAT_IPV4]                = copy_attr_dnat_ipv4,
00449         [ATTR_SNAT_PORT]                = copy_attr_snat_port,
00450         [ATTR_DNAT_PORT]                = copy_attr_dnat_port,
00451         [ATTR_TIMEOUT]                  = copy_attr_timeout,
00452         [ATTR_MARK]                     = copy_attr_mark,
00453         [ATTR_ORIG_COUNTER_PACKETS]     = copy_attr_orig_counter_packets,
00454         [ATTR_ORIG_COUNTER_BYTES]       = copy_attr_orig_counter_bytes,
00455         [ATTR_REPL_COUNTER_PACKETS]     = copy_attr_repl_counter_packets,
00456         [ATTR_REPL_COUNTER_BYTES]       = copy_attr_repl_counter_bytes,
00457         [ATTR_USE]                      = copy_attr_use,
00458         [ATTR_ID]                       = copy_attr_id,
00459         [ATTR_STATUS]                   = copy_attr_status,
00460         [ATTR_TCP_FLAGS_ORIG]           = copy_attr_tcp_flags_orig,
00461         [ATTR_TCP_FLAGS_REPL]           = copy_attr_tcp_flags_repl,
00462         [ATTR_TCP_MASK_ORIG]            = copy_attr_tcp_mask_orig,
00463         [ATTR_TCP_MASK_REPL]            = copy_attr_tcp_mask_repl,
00464         [ATTR_MASTER_IPV4_SRC]          = copy_attr_master_ipv4_src,
00465         [ATTR_MASTER_IPV4_DST]          = copy_attr_master_ipv4_dst,
00466         [ATTR_MASTER_IPV6_SRC]          = copy_attr_master_ipv6_src,
00467         [ATTR_MASTER_IPV6_DST]          = copy_attr_master_ipv6_dst,
00468         [ATTR_MASTER_PORT_SRC]          = copy_attr_master_port_src,
00469         [ATTR_MASTER_PORT_DST]          = copy_attr_master_port_dst,
00470         [ATTR_MASTER_L3PROTO]           = copy_attr_master_l3proto,
00471         [ATTR_MASTER_L4PROTO]           = copy_attr_master_l4proto,
00472         [ATTR_SECMARK]                  = copy_attr_secmark,
00473         [ATTR_ORIG_NAT_SEQ_CORRECTION_POS]      = copy_attr_orig_cor_pos,
00474         [ATTR_ORIG_NAT_SEQ_OFFSET_BEFORE]       = copy_attr_orig_off_bfr,
00475         [ATTR_ORIG_NAT_SEQ_OFFSET_AFTER]        = copy_attr_orig_off_aft,
00476         [ATTR_REPL_NAT_SEQ_CORRECTION_POS]      = copy_attr_repl_cor_pos,
00477         [ATTR_REPL_NAT_SEQ_OFFSET_BEFORE]       = copy_attr_repl_off_bfr,
00478         [ATTR_REPL_NAT_SEQ_OFFSET_AFTER]        = copy_attr_repl_off_aft,
00479         [ATTR_SCTP_STATE]               = copy_attr_sctp_state,
00480         [ATTR_SCTP_VTAG_ORIG]           = copy_attr_sctp_vtag_orig,
00481         [ATTR_SCTP_VTAG_REPL]           = copy_attr_sctp_vtag_repl,
00482         [ATTR_HELPER_NAME]              = copy_attr_helper_name,
00483         [ATTR_DCCP_STATE]               = copy_attr_dccp_state,
00484         [ATTR_DCCP_ROLE]                = copy_attr_dccp_role,
00485         [ATTR_DCCP_HANDSHAKE_SEQ]       = copy_attr_dccp_handshake_seq,
00486         [ATTR_TCP_WSCALE_ORIG]          = copy_attr_tcp_wscale_orig,
00487         [ATTR_TCP_WSCALE_REPL]          = copy_attr_tcp_wscale_repl,
00488         [ATTR_ZONE]                     = copy_attr_zone,
00489         [ATTR_SECCTX]                   = copy_attr_secctx,
00490 };

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