void show_eth_header(struct ethhdr *ethhdr) { char buff[20]; memset(buff, 0, sizeof(buff)); pr_green_info("Ethhdr Header"); pr_std_info("dest_mac = %s", mac_address_tostring((const char *)ethhdr->h_dest, sizeof(ethhdr->h_dest), (const char *)buff)); pr_std_info("src_mac = %s", mac_address_tostring((const char *)ethhdr->h_source, sizeof(ethhdr->h_source), (const char *)buff)); pr_std_info("protocol_type = %x", ntohs(ethhdr->h_proto)); pr_std_info(""); }
int unpack(const char *pkg_name, const char *dir_name) { int ret; int pkg_fd; int img_fd; struct swan_file_info file_info; struct swan_package_info pkg_info; struct swan_image_info img_info; char tmp_path[1024]; pr_std_info("unpack upgrade file \"%s\" -> \"%s\"", pkg_name, dir_name); ret = swan_check_md5sum(pkg_name); if (ret < 0) { pr_err_info("swan_check_md5sum"); return ret; } pkg_fd = open(pkg_name, O_RDONLY | O_BINARY); if (pkg_fd < 0) { pr_err_info("open file \"%s\"", pkg_name); return -1; } ret = cavan_mkdir(dir_name); if (ret < 0) { pr_err_info("cavan_mkdir"); goto out_close_pkg; } text_path_cat(tmp_path, sizeof(tmp_path), dir_name, HEADER_BIN_NAME); ret = read_upgrade_program(pkg_fd, &file_info, tmp_path); if (ret < 0) { pr_err_info("get_upgrade_program"); goto out_close_pkg; } ret = read_resource_image(pkg_fd, &pkg_info, dir_name, 0, 0); if (ret < 0) { pr_err_info("get_resource_image"); goto out_close_pkg; } while (pkg_info.image_count) { ret = read_image_info(pkg_fd, &img_info); if (ret < 0) { pr_err_info("read_image_info"); goto out_close_pkg; } text_path_cat(tmp_path, sizeof(tmp_path), dir_name, img_info.filename); img_fd = open(tmp_path, O_WRONLY | O_CREAT | O_SYNC | O_TRUNC | O_BINARY, 0777); if (img_fd < 0) { pr_err_info("open"); goto out_close_pkg; } ret = read_simple_image(pkg_fd, img_fd, img_info.length, 0); if (ret < 0) { pr_err_info("get_image"); goto out_close_img; } close(img_fd); pkg_info.image_count--; } println_green("Decompression upgrade package \"%s\" to \"%s\" is ok", pkg_name, dir_name); ret = 0; goto out_close_pkg; out_close_img: close(img_fd); out_close_pkg: close(pkg_fd); if (ret < 0) { rmdir(dir_name); } return ret; }