Date: Wed, 3 Sep 2014 21:57:06 +0000 (UTC) From: "Alexander V. Chernikov" <melifaro@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r271056 - projects/ipfw/sys/netpfil/ipfw Message-ID: <201409032157.s83Lv6m0089028@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: melifaro Date: Wed Sep 3 21:57:06 2014 New Revision: 271056 URL: http://svnweb.freebsd.org/changeset/base/271056 Log: Be consistent and use same arguments for ctl3 opcodes. Move legacy IP_FW_TABLE_XGETSIZE handling to separate function. Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c Wed Sep 3 21:45:39 2014 (r271055) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c Wed Sep 3 21:57:06 2014 (r271056) @@ -484,7 +484,8 @@ export_iface_internal(struct namedobj_in * Returns 0 on success */ int -ipfw_list_ifaces(struct ip_fw_chain *ch, struct sockopt_data *sd) +ipfw_list_ifaces(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd) { struct namedobj_instance *ii; struct _ipfw_obj_lheader *olh; Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h Wed Sep 3 21:45:39 2014 (r271055) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h Wed Sep 3 21:57:06 2014 (r271056) @@ -520,7 +520,8 @@ int ipfw_iface_ref(struct ip_fw_chain *c void ipfw_iface_unref(struct ip_fw_chain *ch, struct ipfw_ifc *ic); void ipfw_iface_add_notify(struct ip_fw_chain *ch, struct ipfw_ifc *ic); void ipfw_iface_del_notify(struct ip_fw_chain *ch, struct ipfw_ifc *ic); -int ipfw_list_ifaces(struct ip_fw_chain *ch, struct sockopt_data *sd); +int ipfw_list_ifaces(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd); /* In ip_fw_sockopt.c */ void ipfw_init_skipto_cache(struct ip_fw_chain *chain); Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c Wed Sep 3 21:45:39 2014 (r271055) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c Wed Sep 3 21:57:06 2014 (r271056) @@ -1926,7 +1926,8 @@ dump_static_rules(struct ip_fw_chain *ch * Returns 0 on success. */ static int -dump_config(struct ip_fw_chain *chain, struct sockopt_data *sd) +dump_config(struct ip_fw_chain *chain, ip_fw3_opheader *op3, + struct sockopt_data *sd) { ipfw_cfg_lheader *hdr; struct ip_fw *rule; @@ -2436,7 +2437,7 @@ ipfw_ctl3(struct sockopt *sopt) switch (opt) { case IP_FW_XGET: - error = dump_config(chain, &sdata); + error = dump_config(chain, op3, &sdata); break; case IP_FW_XADD: @@ -2463,7 +2464,7 @@ ipfw_ctl3(struct sockopt *sopt) break; case IP_FW_XIFLIST: - error = ipfw_list_ifaces(chain, &sdata); + error = ipfw_list_ifaces(chain, op3, &sdata); break; /*--- TABLE opcodes ---*/ @@ -2481,11 +2482,11 @@ ipfw_ctl3(struct sockopt *sopt) break; case IP_FW_TABLE_XINFO: - error = ipfw_describe_table(chain, &sdata); + error = ipfw_describe_table(chain, op3, &sdata); break; case IP_FW_TABLES_XLIST: - error = ipfw_list_tables(chain, &sdata); + error = ipfw_list_tables(chain, op3, &sdata); break; case IP_FW_TABLE_XLIST: @@ -2506,7 +2507,7 @@ ipfw_ctl3(struct sockopt *sopt) break; case IP_FW_TABLES_ALIST: - error = ipfw_list_table_algo(chain, &sdata); + error = ipfw_list_table_algo(chain, op3, &sdata); break; case IP_FW_TABLE_VLIST: @@ -2514,26 +2515,7 @@ ipfw_ctl3(struct sockopt *sopt) break; case IP_FW_TABLE_XGETSIZE: - { - uint32_t *tbl; - struct tid_info ti; - - if (IP_FW3_OPLENGTH(sopt) < sizeof(uint32_t)) { - error = EINVAL; - break; - } - - tbl = (uint32_t *)(op3 + 1); - - memset(&ti, 0, sizeof(ti)); - ti.uidx = *tbl; - IPFW_UH_RLOCK(chain); - error = ipfw_count_xtable(chain, &ti, tbl); - IPFW_UH_RUNLOCK(chain); - if (error) - break; - error = sooptcopyout(sopt, op3, sopt->sopt_valsize); - } + error = ipfw_get_table_size(chain, op3, &sdata); break; default: Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c Wed Sep 3 21:45:39 2014 (r271055) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c Wed Sep 3 21:57:06 2014 (r271056) @@ -1754,7 +1754,8 @@ ipfw_lookup_table_extended(struct ip_fw_ * Returns 0 on success */ int -ipfw_list_tables(struct ip_fw_chain *ch, struct sockopt_data *sd) +ipfw_list_tables(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd) { struct _ipfw_obj_lheader *olh; int error; @@ -1781,7 +1782,8 @@ ipfw_list_tables(struct ip_fw_chain *ch, * Returns 0 on success. */ int -ipfw_describe_table(struct ip_fw_chain *ch, struct sockopt_data *sd) +ipfw_describe_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd) { struct _ipfw_obj_header *oh; struct table_config *tc; @@ -2390,6 +2392,32 @@ ipfw_dump_table_v0(struct ip_fw_chain *c } /* + * Legacy function to retrieve number of items in table. + */ +int +ipfw_get_table_size(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd) +{ + uint32_t *tbl; + struct tid_info ti; + size_t sz; + int error; + + sz = sizeof(*op3) + sizeof(uint32_t); + op3 = (ip_fw3_opheader *)ipfw_get_sopt_header(sd, sz); + if (op3 == NULL) + return (EINVAL); + + tbl = (uint32_t *)(op3 + 1); + memset(&ti, 0, sizeof(ti)); + ti.uidx = *tbl; + IPFW_UH_RLOCK(ch); + error = ipfw_count_xtable(ch, &ti, tbl); + IPFW_UH_RUNLOCK(ch); + return (error); +} + +/* * Legacy IP_FW_TABLE_GETSIZE handler */ int @@ -2773,7 +2801,8 @@ ipfw_del_table_algo(struct ip_fw_chain * * Returns 0 on success */ int -ipfw_list_table_algo(struct ip_fw_chain *ch, struct sockopt_data *sd) +ipfw_list_table_algo(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd) { struct _ipfw_obj_lheader *olh; struct tables_config *tcfg; Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h Wed Sep 3 21:45:39 2014 (r271055) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h Wed Sep 3 21:57:06 2014 (r271056) @@ -163,10 +163,12 @@ void ipfw_table_algo_destroy(struct ip_f /* direct ipfw_ctl handlers */ -int ipfw_list_tables(struct ip_fw_chain *ch, struct sockopt_data *sd); +int ipfw_list_tables(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd); int ipfw_dump_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd); -int ipfw_describe_table(struct ip_fw_chain *ch, struct sockopt_data *sd); +int ipfw_describe_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd); int ipfw_find_table_entry(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd); @@ -178,7 +180,8 @@ int ipfw_manage_table_ent(struct ip_fw_c struct sockopt_data *sd); int ipfw_flush_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd); -int ipfw_list_table_algo(struct ip_fw_chain *ch, struct sockopt_data *sd); +int ipfw_list_table_algo(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd); int ipfw_swap_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3, struct sockopt_data *sd); /* Exported to support legacy opcodes */ @@ -189,6 +192,8 @@ int del_table_entry(struct ip_fw_chain * int flush_table(struct ip_fw_chain *ch, struct tid_info *ti); void ipfw_import_table_value_legacy(uint32_t value, struct table_value *v); uint32_t ipfw_export_table_value_legacy(struct table_value *v); +int ipfw_get_table_size(struct ip_fw_chain *ch, ip_fw3_opheader *op3, + struct sockopt_data *sd); /* ipfw_table_value.c functions */ int ipfw_list_table_values(struct ip_fw_chain *ch, ip_fw3_opheader *op3,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201409032157.s83Lv6m0089028>