代码拉取完成,页面将自动刷新
#
# Copyright (c) 2012-2018, Intel Corporation
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of Intel Corporation nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
LIB = libIPSec_MB
SHARED ?= y
IMB_HDR = intel-ipsec-mb.h
# Detect library version
IMB_VERSION = $(shell grep -e "IMB_VERSION_STR" $(IMB_HDR) | cut -d'"' -f2)
ifeq ($(IMB_VERSION),)
$(error "Failed to detect library version!")
endif
VERSION = $(shell echo $(IMB_VERSION) | cut -d. -f1-2)
SO_VERSION = $(shell echo $(VERSION) | cut -d. -f1)
PREFIX ?= /usr
LIB_INSTALL_DIR ?= $(PREFIX)/lib
HDR_DIR ?= $(PREFIX)/include
MAN_DIR ?= $(PREFIX)/man/man7
MAN1 = libipsec-mb.7
MAN2 = libipsec-mb-dev.7
NOLDCONFIG ?= n
USE_YASM ?= n
YASM ?= yasm
NASM ?= nasm
OBJ_DIR = obj
INCLUDE_DIRS := include . no-aesni
INCLUDES := $(foreach i,$(INCLUDE_DIRS),-I $i)
CC ?= gcc
CFLAGS := -DLINUX $(EXTRA_CFLAGS) $(INCLUDES) \
-W -Wall -Wextra -Wmissing-declarations -Wpointer-arith \
-Wcast-qual -Wundef -Wwrite-strings \
-Wformat -Wformat-security \
-Wunreachable-code -Wmissing-noreturn -Wsign-compare -Wno-endif-labels \
-Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition
ifeq ($(DEBUG),y)
CFLAGS += -g -DDEBUG
OPT = -O0
LDFLAGS += -g
else
OPT = -O3
CFLAGS += -fstack-protector -D_FORTIFY_SOURCE=2
endif
# prevent SIMD optimizations for non-aesni modules
CFLAGS_NO_SIMD = $(CFLAGS) -O1
CFLAGS += $(OPT)
# Set architectural optimizations for GCC/CC
ifeq ($(CC),$(filter $(CC),gcc cc))
GCC_VERSION = $(shell $(CC) -dumpversion | cut -d. -f1)
GCC_GE_V5 = $(shell [ $(GCC_VERSION) -ge 5 ] && echo true)
ifeq ($(GCC_GE_V5),true)
OPT_SSE = -march=nehalem
OPT_AVX = -march=sandybridge
OPT_AVX2 = -march=haswell
OPT_AVX512 = -march=broadwell
endif
endif
# so or static build
ifeq ($(SHARED),y)
CFLAGS += -fPIC
LIBNAME = $(LIB).so.$(VERSION)
LIBPERM = 0755
LDFLAGS += -z noexecstack -z relro -z now
else
CFLAGS += -fPIE
LIBNAME = $(LIB).a
LIBPERM = 0644
LDFLAGS += -g
endif
ASM_INCLUDE_DIRS := .
YASM_INCLUDES := $(foreach i,$(ASM_INCLUDE_DIRS),-I $i)
YASM_FLAGS := -f x64 -f elf64 -X gnu -g dwarf2 -DLINUX -D__linux__ $(YASM_INCLUDES)
NASM_INCLUDES := $(foreach i,$(ASM_INCLUDE_DIRS),-I$i/)
NASM_FLAGS := -felf64 -Xgnu -gdwarf -DLINUX -D__linux__ $(NASM_INCLUDES)
#
# List of C modules (any origin)
#
c_lib_objs := \
mb_mgr_avx.o \
mb_mgr_avx2.o \
mb_mgr_avx512.o \
mb_mgr_sse.o \
mb_mgr_sse_no_aesni.o \
alloc.o \
aes_xcbc_expand_key.o \
md5_one_block.o \
sha_one_block.o \
des_key.o \
des_basic.o \
version.o \
cpu_feature.o \
aesni_emu.o
#
# List of ASM modules (root directory/common)
#
asm_generic_lib_objs := \
aes_keyexp_128.o \
aes_keyexp_192.o \
aes_keyexp_256.o \
aes_cmac_subkey_gen.o \
save_xmms.o \
const.o \
aes128_ecbenc_x3.o
#
# List of ASM modules (no-aesni directory)
#
asm_noaesni_lib_objs := \
aes128_cbc_dec_by4_sse_no_aesni.o \
aes192_cbc_dec_by4_sse_no_aesni.o \
aes256_cbc_dec_by4_sse_no_aesni.o \
aes_cbc_enc_128_x4_no_aesni.o \
aes_cbc_enc_192_x4_no_aesni.o \
aes_cbc_enc_256_x4_no_aesni.o \
aes128_cntr_by4_sse_no_aesni.o \
aes192_cntr_by4_sse_no_aesni.o \
aes256_cntr_by4_sse_no_aesni.o \
aes_cfb_128_sse_no_aesni.o \
aes128_cbc_mac_x4_no_aesni.o \
aes_xcbc_mac_128_x4_no_aesni.o \
mb_mgr_aes_flush_sse_no_aesni.o \
mb_mgr_aes_submit_sse_no_aesni.o \
mb_mgr_aes192_flush_sse_no_aesni.o \
mb_mgr_aes192_submit_sse_no_aesni.o \
mb_mgr_aes256_flush_sse_no_aesni.o \
mb_mgr_aes256_submit_sse_no_aesni.o \
mb_mgr_aes_cmac_submit_flush_sse_no_aesni.o \
mb_mgr_aes_xcbc_flush_sse_no_aesni.o \
mb_mgr_aes_xcbc_submit_sse_no_aesni.o
#
# List of ASM modules (sse directory)
#
asm_sse_lib_objs := \
aes128_cbc_dec_by4_sse.o \
aes192_cbc_dec_by4_sse.o \
aes256_cbc_dec_by4_sse.o \
aes_cbc_enc_128_x4.o \
aes_cbc_enc_192_x4.o \
aes_cbc_enc_256_x4.o \
aes128_cntr_by4_sse.o \
aes192_cntr_by4_sse.o \
aes256_cntr_by4_sse.o \
aes_cfb_128_sse.o \
aes128_cbc_mac_x4.o \
aes_xcbc_mac_128_x4.o \
md5_x4x2_sse.o \
sha1_mult_sse.o \
sha1_one_block_sse.o \
sha224_one_block_sse.o \
sha256_one_block_sse.o \
sha384_one_block_sse.o \
sha512_one_block_sse.o \
sha512_x2_sse.o \
sha_256_mult_sse.o \
sha1_ni_x2_sse.o \
sha256_ni_x2_sse.o \
mb_mgr_aes_flush_sse.o \
mb_mgr_aes_submit_sse.o \
mb_mgr_aes192_flush_sse.o \
mb_mgr_aes192_submit_sse.o \
mb_mgr_aes256_flush_sse.o \
mb_mgr_aes256_submit_sse.o \
mb_mgr_aes_cmac_submit_flush_sse.o \
mb_mgr_aes_xcbc_flush_sse.o \
mb_mgr_aes_xcbc_submit_sse.o \
mb_mgr_hmac_md5_flush_sse.o \
mb_mgr_hmac_md5_submit_sse.o \
mb_mgr_hmac_flush_sse.o \
mb_mgr_hmac_submit_sse.o \
mb_mgr_hmac_sha_224_flush_sse.o \
mb_mgr_hmac_sha_224_submit_sse.o \
mb_mgr_hmac_sha_256_flush_sse.o \
mb_mgr_hmac_sha_256_submit_sse.o \
mb_mgr_hmac_sha_384_flush_sse.o \
mb_mgr_hmac_sha_384_submit_sse.o \
mb_mgr_hmac_sha_512_flush_sse.o \
mb_mgr_hmac_sha_512_submit_sse.o \
mb_mgr_hmac_flush_ni_sse.o \
mb_mgr_hmac_submit_ni_sse.o \
mb_mgr_hmac_sha_224_flush_ni_sse.o \
mb_mgr_hmac_sha_224_submit_ni_sse.o \
mb_mgr_hmac_sha_256_flush_ni_sse.o \
mb_mgr_hmac_sha_256_submit_ni_sse.o
#
# List of ASM modules (avx directory)
#
asm_avx_lib_objs := \
aes_cbc_enc_128_x8.o \
aes_cbc_enc_192_x8.o \
aes_cbc_enc_256_x8.o \
aes128_cbc_dec_by8_avx.o \
aes192_cbc_dec_by8_avx.o \
aes256_cbc_dec_by8_avx.o \
aes128_cntr_by8_avx.o \
aes192_cntr_by8_avx.o \
aes256_cntr_by8_avx.o \
aes_cfb_128_avx.o \
aes128_cbc_mac_x8.o \
aes_xcbc_mac_128_x8.o \
md5_x4x2_avx.o \
sha1_mult_avx.o \
sha1_one_block_avx.o \
sha224_one_block_avx.o \
sha256_one_block_avx.o \
sha_256_mult_avx.o \
sha384_one_block_avx.o \
sha512_one_block_avx.o \
sha512_x2_avx.o \
mb_mgr_aes_flush_avx.o \
mb_mgr_aes_submit_avx.o \
mb_mgr_aes192_flush_avx.o \
mb_mgr_aes192_submit_avx.o \
mb_mgr_aes256_flush_avx.o \
mb_mgr_aes256_submit_avx.o \
mb_mgr_aes_cmac_submit_flush_avx.o\
mb_mgr_aes_xcbc_flush_avx.o \
mb_mgr_aes_xcbc_submit_avx.o \
mb_mgr_hmac_md5_flush_avx.o \
mb_mgr_hmac_md5_submit_avx.o \
mb_mgr_hmac_flush_avx.o \
mb_mgr_hmac_submit_avx.o \
mb_mgr_hmac_sha_224_flush_avx.o \
mb_mgr_hmac_sha_224_submit_avx.o \
mb_mgr_hmac_sha_256_flush_avx.o \
mb_mgr_hmac_sha_256_submit_avx.o \
mb_mgr_hmac_sha_384_flush_avx.o \
mb_mgr_hmac_sha_384_submit_avx.o \
mb_mgr_hmac_sha_512_flush_avx.o \
mb_mgr_hmac_sha_512_submit_avx.o
#
# List of ASM modules (avx2 directory)
#
asm_avx2_lib_objs := \
md5_x8x2_avx2.o \
sha1_x8_avx2.o \
sha256_oct_avx2.o \
sha512_x4_avx2.o \
mb_mgr_hmac_md5_flush_avx2.o \
mb_mgr_hmac_md5_submit_avx2.o \
mb_mgr_hmac_flush_avx2.o \
mb_mgr_hmac_submit_avx2.o \
mb_mgr_hmac_sha_224_flush_avx2.o \
mb_mgr_hmac_sha_224_submit_avx2.o \
mb_mgr_hmac_sha_256_flush_avx2.o \
mb_mgr_hmac_sha_256_submit_avx2.o \
mb_mgr_hmac_sha_384_flush_avx2.o \
mb_mgr_hmac_sha_384_submit_avx2.o \
mb_mgr_hmac_sha_512_flush_avx2.o \
mb_mgr_hmac_sha_512_submit_avx2.o
#
# List of ASM modules (avx512 directory)
#
asm_avx512_lib_objs := \
sha1_x16_avx512.o \
sha256_x16_avx512.o \
sha512_x8_avx512.o \
des_x16_avx512.o \
mb_mgr_hmac_flush_avx512.o \
mb_mgr_hmac_submit_avx512.o \
mb_mgr_hmac_sha_224_flush_avx512.o \
mb_mgr_hmac_sha_224_submit_avx512.o \
mb_mgr_hmac_sha_256_flush_avx512.o \
mb_mgr_hmac_sha_256_submit_avx512.o \
mb_mgr_hmac_sha_384_flush_avx512.o \
mb_mgr_hmac_sha_384_submit_avx512.o \
mb_mgr_hmac_sha_512_flush_avx512.o \
mb_mgr_hmac_sha_512_submit_avx512.o \
mb_mgr_des_avx512.o
#
# GCM object file lists
#
c_gcm_objs := gcm.o
asm_noaesni_gcm_objs := \
gcm128_sse_no_aesni.o gcm192_sse_no_aesni.o gcm256_sse_no_aesni.o
asm_sse_gcm_objs := \
gcm128_sse.o gcm192_sse.o gcm256_sse.o
asm_avx_gcm_objs := \
gcm128_avx_gen2.o gcm192_avx_gen2.o gcm256_avx_gen2.o
asm_avx2_gcm_objs := \
gcm128_avx_gen4.o gcm192_avx_gen4.o gcm256_avx_gen4.o
asm_avx512_gcm_objs := \
gcm128_vaes_avx512.o gcm192_vaes_avx512.o gcm256_vaes_avx512.o \
gcm128_avx512.o gcm192_avx512.o gcm256_avx512.o
#
# build object files lists for GCM and NO-GCM variants
#
ifeq ($(NO_GCM), y)
CFLAGS += -DNO_GCM
asm_obj_files := $(asm_generic_lib_objs) $(asm_noaesni_lib_objs) \
$(asm_sse_lib_objs) $(asm_avx_lib_objs) \
$(asm_avx2_lib_objs) $(asm_avx512_lib_objs)
c_obj_files := $(c_lib_objs)
else
asm_obj_files := $(asm_generic_lib_objs) \
$(asm_noaesni_lib_objs) $(asm_noaesni_gcm_objs) \
$(asm_sse_lib_objs) $(asm_sse_gcm_objs) \
$(asm_avx_lib_objs) $(asm_avx_gcm_objs) \
$(asm_avx2_lib_objs) $(asm_avx2_gcm_objs) \
$(asm_avx512_lib_objs) $(asm_avx512_gcm_objs)
c_obj_files := $(c_lib_objs) $(c_gcm_objs)
endif
#
# aggregate all objects files together and prefix with OBJDIR
#
lib_obj_files := $(asm_obj_files) $(c_obj_files)
target_obj_files := $(lib_obj_files:%=$(OBJ_DIR)/%)
#
# create a list of dependency files for assembly modules
# create a list of dependency files for c modules then
# prefix these with OBJDIR
#
asm_dep_files := $(asm_obj_files:%.o=%.d)
c_dep_files := $(c_obj_files:%.o=%.d)
c_dep_target_files := $(c_dep_files:%=$(OBJ_DIR)/%)
#
# aggregate all dependency files together and prefix with OBJDIR
#
dep_files := $(asm_dep_files) $(c_dep_files)
dep_target_files := $(dep_files:%=$(OBJ_DIR)/%)
all: $(LIBNAME)
$(LIBNAME): $(target_obj_files)
ifeq ($(SHARED),y)
$(CC) -shared -Wl,-soname,$(LIB).so.$(SO_VERSION) -o $(LIBNAME) $^ -lc
ln -f -s $(LIBNAME) $(LIB).so.$(SO_VERSION)
ln -f -s $(LIB).so.$(SO_VERSION) $(LIB).so
else
$(AR) -qcs $@ $^
endif
.PHONY: install
install: $(LIBNAME)
install -d $(HDR_DIR)
install -m 0644 $(IMB_HDR) $(HDR_DIR)
install -d $(LIB_INSTALL_DIR)
install -s -m $(LIBPERM) $(LIBNAME) $(LIB_INSTALL_DIR)
install -d $(MAN_DIR)
install -m 0444 $(MAN1) $(MAN_DIR)
install -m 0444 $(MAN2) $(MAN_DIR)
ifeq ($(SHARED),y)
cd $(LIB_INSTALL_DIR); \
ln -f -s $(LIB).so.$(VERSION) $(LIB).so.$(SO_VERSION); \
ln -f -s $(LIB).so.$(SO_VERSION) $(LIB).so
ifneq ($(NOLDCONFIG),y)
ldconfig
endif
endif
.PHONY: uninstall
uninstall: $(LIBNAME)
-rm -f $(HDR_DIR)/$(IMB_HDR)
-rm -f $(LIB_INSTALL_DIR)/$(LIBNAME)
-rm -f $(MAN_DIR)/$(MAN1)
-rm -f $(MAN_DIR)/$(MAN2)
ifeq ($(SHARED),y)
-rm -f $(LIB_INSTALL_DIR)/$(LIB).so.$(SO_VERSION)
-rm -f $(LIB_INSTALL_DIR)/$(LIB).so
endif
.PHONY: build_c_dep_target_files
build_c_dep_target_files: $(c_dep_target_files)
$(target_obj_files): | $(OBJ_DIR) build_c_dep_target_files
$(dep_target_files): | $(OBJ_DIR)
#
# dependency file build recipies
#
$(OBJ_DIR)/%.d:%.c
$(CC) -MM -MP -MF $@ $(CFLAGS) $<
$(OBJ_DIR)/%.d:sse/%.c
$(CC) -MM -MP -MF $@ $(CFLAGS) $<
$(OBJ_DIR)/%.d:avx/%.c
$(CC) -MM -MP -MF $@ $(CFLAGS) $<
$(OBJ_DIR)/%.d:avx2/%.c
$(CC) -MM -MP -MF $@ $(CFLAGS) $<
$(OBJ_DIR)/%.d:avx512/%.c
$(CC) -MM -MP -MF $@ $(CFLAGS) $<
$(OBJ_DIR)/%.d:no-aesni/%.c
$(CC) -MM -MP -MF $@ $(CFLAGS) $<
#
# object file build recipies
#
$(OBJ_DIR)/%.o:%.c
$(CC) -c $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o:%.asm
ifeq ($(USE_YASM),y)
$(YASM) $(YASM_FLAGS) $< -o $@
else
$(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $<
endif
$(OBJ_DIR)/%.o:sse/%.c
$(CC) $(OPT_SSE) -c $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o:sse/%.asm
ifeq ($(USE_YASM),y)
$(YASM) $(YASM_FLAGS) $< -o $@
else
$(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $<
endif
$(OBJ_DIR)/%.o:avx/%.c
$(CC) $(OPT_AVX) -c $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o:avx/%.asm
ifeq ($(USE_YASM),y)
$(YASM) $(YASM_FLAGS) $< -o $@
else
$(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $<
endif
$(OBJ_DIR)/%.o:avx2/%.c
$(CC) $(OPT_AVX2) -c $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o:avx2/%.asm
ifeq ($(USE_YASM),y)
$(YASM) $(YASM_FLAGS) $< -o $@
else
$(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $<
endif
$(OBJ_DIR)/%.o:avx512/%.c
$(CC) $(OPT_AVX512) -c $(CFLAGS) $< -o $@
$(OBJ_DIR)/%.o:avx512/%.asm
ifeq ($(USE_YASM),y)
$(YASM) $(YASM_FLAGS) $< -o $@
else
$(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $<
endif
$(OBJ_DIR)/%.o:include/%.asm
ifeq ($(USE_YASM),y)
$(YASM) $(YASM_FLAGS) $< -o $@
else
$(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $<
endif
$(OBJ_DIR)/%.o:no-aesni/%.c
$(CC) -c $(CFLAGS_NO_SIMD) $< -o $@
$(OBJ_DIR)/%.o:no-aesni/%.asm
ifeq ($(USE_YASM),y)
$(YASM) $(YASM_FLAGS) $< -o $@
else
$(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $<
endif
$(OBJ_DIR):
mkdir $(OBJ_DIR)
.PHONY: TAGS
TAGS:
find ./ -name '*.[ch]' | etags -
find ./ -name '*.asm' | etags -a -
find ./ -name '*.inc' | etags -a -
.PHONY: clean
clean:
rm -Rf $(target_obj_files)
rm -Rf $(dep_target_files)
rm -f $(LIB).a $(LIB).so*
CHECKPATCH ?= checkpatch.pl
# checkpatch ignore settings:
# SPACING - produces false positives with tyepdefs and *
# CONSTANT_COMPARISON - forbids defensive programming technique
# USE_FUNC - produces false positives for Windows target
# INITIALISED_STATIC, LEADING_SPACE, SPLIT_STRING, CODE_INDENT,
# PREFER_ALIGNED, UNSPECIFIED_INT, ARRAY_SIZE, GLOBAL_INITIALISERS,
# NEW_TYPEDEFS, AVOID_EXTERNS, COMPLEX_MACRO, BLOCK_COMMENT_STYLE
# - found obsolete in this project
#
# NOTE: these flags cannot be broken into multiple lines due to
# spaces injected by make
CHECKPATCH_FLAGS = --no-tree --no-signoff --emacs --no-color --ignore CODE_INDENT,INITIALISED_STATIC,LEADING_SPACE,SPLIT_STRING,UNSPECIFIED_INT,ARRAY_SIZE,BLOCK_COMMENT_STYLE,GLOBAL_INITIALISERS,NEW_TYPEDEFS,AVOID_EXTERNS,COMPLEX_MACRO,PREFER_ALIGNED,USE_FUNC,CONSTANT_COMPARISON,SPACING
%.c_style_check : %.c
$(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $<
%.h_style_check : %.h
$(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $<
%.asm_style_check : %.asm
$(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $<
%.inc_style_check : %.inc
$(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $<
SOURCES_DIRS := . sse avx avx2 avx512 include no-aesni
SOURCES := $(foreach dir,$(SOURCES_DIRS),$(wildcard $(dir)/*.[ch]) $(wildcard $(dir)/*.asm) $(wildcard $(dir)/*.inc))
SOURCES_STYLE := $(foreach infile,$(SOURCES),$(infile)_style_check)
.PHONY: style
style: $(SOURCES_STYLE)
# if target not clean or rinse then make dependencies
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),style)
-include $(dep_target_files)
endif
endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。