📄 ipsec_proc.c
字号:
char *natttype_name; switch(sa_p->ips_natt_type) { case ESPINUDP_WITH_NON_IKE: natttype_name="nonike"; break; case ESPINUDP_WITH_NON_ESP: natttype_name="nonesp"; break; default: natttype_name = "unknown"; break; } len += ipsec_snprintf(buffer + len, length-len, " natencap=%s", natttype_name); len += ipsec_snprintf(buffer + len, length-len, " natsport=%d", sa_p->ips_natt_sport); len += ipsec_snprintf(buffer + len,length-len, " natdport=%d", sa_p->ips_natt_dport); }#endif /* CONFIG_KLIPS_NAT_TRAVERSAL */ len += ipsec_snprintf(buffer + len,length-len, " refcount=%d", atomic_read(&sa_p->ips_refcount)); len += ipsec_snprintf(buffer+len, length-len, " ref=%d", sa_p->ips_ref);#ifdef CONFIG_KLIPS_DEBUG if(debug_xform) { len += ipsec_snprintf(buffer+len, length-len, " reftable=%lu refentry=%lu", (unsigned long)IPsecSAref2table(sa_p->ips_ref), (unsigned long)IPsecSAref2entry(sa_p->ips_ref)); }#endif /* CONFIG_KLIPS_DEBUG */ len += ipsec_snprintf(buffer+len, length-len, "\n"); atomic_dec(&sa_p->ips_refcount); if (len >= max_content) { /* we've done all that can fit -- stop loops */ len = max_content; /* truncate crap */ goto done_spi_i; } else { const off_t pos = begin + len; /* file position of end of what we've generated */ if (pos <= offset) { /* all is before first interesting character: * discard, but note where we are. */ len = 0; begin = pos; } } } }done_spi_i: spin_unlock_bh(&tdb_lock); *start = buffer + (offset - begin); /* Start of wanted data */ return len - (offset - begin);}IPSEC_PROCFS_DEBUG_NO_STATICintipsec_spigrp_get_info(char *buffer, char **start, off_t offset, int length IPSEC_PROC_LAST_ARG){ /* Limit of useful snprintf output */ const int max_content = length > 0? length-1 : 0; int len = 0; off_t begin = 0; int i; struct ipsec_sa *sa_p, *sa_p2; char sa[SATOT_BUF]; size_t sa_len; KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_spigrp_get_info: " "buffer=0p%p, *start=0p%p, offset=%d, length=%d\n", buffer, *start, (int)offset, length); spin_lock_bh(&tdb_lock); for (i = 0; i < SADB_HASHMOD; i++) { for (sa_p = ipsec_sadb_hash[i]; sa_p != NULL; sa_p = sa_p->ips_hnext) { atomic_inc(&sa_p->ips_refcount); if(sa_p->ips_inext == NULL) { sa_p2 = sa_p; while(sa_p2 != NULL) { atomic_inc(&sa_p2->ips_refcount); sa_len = satot(&sa_p2->ips_said, 'x', sa, sizeof(sa)); len += ipsec_snprintf(buffer+len, length-len, "%s ", sa_len ? sa : " (error)"); atomic_dec(&sa_p2->ips_refcount); sa_p2 = sa_p2->ips_onext; } len += ipsec_snprintf(buffer+len, length-len, "\n"); } atomic_dec(&sa_p->ips_refcount); if (len >= max_content) { /* we've done all that can fit -- stop loops */ len = max_content; /* truncate crap */ goto done_spigrp_i; } else { const off_t pos = begin + len; if (pos <= offset) { /* all is before first interesting character: * discard, but note where we are. */ len = 0; begin = pos; } } } }done_spigrp_i: spin_unlock_bh(&tdb_lock); *start = buffer + (offset - begin); /* Start of wanted data */ return len - (offset - begin);}IPSEC_PROCFS_DEBUG_NO_STATICintipsec_tncfg_get_info(char *buffer, char **start, off_t offset, int length IPSEC_PROC_LAST_ARG){ /* limit of useful snprintf output */ const int max_content = length > 0? length-1 : 0; int len = 0; off_t begin = 0; int i; char name[9]; struct net_device *dev, *privdev; struct ipsecpriv *priv; KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_tncfg_get_info: " "buffer=0p%p, *start=0p%p, offset=%d, length=%d\n", buffer, *start, (int)offset, length); for(i = 0; i < IPSEC_NUM_IF; i++) { ipsec_snprintf(name, (ssize_t) sizeof(name), IPSEC_DEV_FORMAT, i); dev = __ipsec_dev_get(name); if(dev) { priv = (struct ipsecpriv *)(dev->priv); len += ipsec_snprintf(buffer+len, length-len, "%s", dev->name); if(priv) { privdev = (struct net_device *)(priv->dev); len += ipsec_snprintf(buffer+len, length-len, " -> %s", privdev ? privdev->name : "NULL"); len += ipsec_snprintf(buffer+len, length-len, " mtu=%d(%d) -> %d", dev->mtu, priv->mtu, privdev ? privdev->mtu : 0); } else { KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_tncfg_get_info: device '%s' has no private data space!\n", dev->name); } len += ipsec_snprintf(buffer+len, length-len, "\n"); if (len >= max_content) { /* we've done all that can fit -- stop loop */ len = max_content; /* truncate crap */ break; } else { const off_t pos = begin + len; if (pos <= offset) { len = 0; begin = pos; } } } } *start = buffer + (offset - begin); /* Start of wanted data */ len -= (offset - begin); /* Start slop */ if (len > length) len = length; return len;}IPSEC_PROCFS_DEBUG_NO_STATICintipsec_version_get_info(char *buffer, char **start, off_t offset, int length IPSEC_PROC_LAST_ARG){ int len = 0; off_t begin = 0; KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_version_get_info: " "buffer=0p%p, *start=0p%p, offset=%d, length=%d\n", buffer, *start, (int)offset, length); len += ipsec_snprintf(buffer + len,length-len, "Openswan version: %s\n", ipsec_version_code());#if 0 KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_version_get_info: " "ipsec_init version: %s\n", ipsec_init_c_version); KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_version_get_info: " "ipsec_tunnel version: %s\n", ipsec_tunnel_c_version); KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_version_get_info: " "ipsec_netlink version: %s\n", ipsec_netlink_c_version); KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_version_get_info: " "radij_c_version: %s\n", radij_c_version);#endif *start = buffer + (offset - begin); /* Start of wanted data */ len -= (offset - begin); /* Start slop */ if (len > length) len = length; return len;}IPSEC_PROCFS_DEBUG_NO_STATICintipsec_birth_info(char *page, char **start, off_t offset, int count, int *eof, void *data){ struct ipsec_birth_reply *ibr = (struct ipsec_birth_reply *)data; int len; if(offset >= ibr->packet_template_len) { if(eof) { *eof=1; } return 0; } len = ibr->packet_template_len; len -= offset; if (len > count) len = count; memcpy(page + offset, ibr->packet_template+offset, len); return len;}IPSEC_PROCFS_DEBUG_NO_STATICintipsec_birth_set(struct file *file, const char *buffer, unsigned long count, void *data){ struct ipsec_birth_reply *ibr = (struct ipsec_birth_reply *)data; int len; KLIPS_INC_USE; if(count > IPSEC_BIRTH_TEMPLATE_MAXLEN) { len = IPSEC_BIRTH_TEMPLATE_MAXLEN; } else { len = count; } if(copy_from_user(ibr->packet_template, buffer, len)) { KLIPS_DEC_USE; return -EFAULT; } ibr->packet_template_len = len; KLIPS_DEC_USE; return len;}#ifdef CONFIG_KLIPS_DEBUGIPSEC_PROCFS_DEBUG_NO_STATICintipsec_klipsdebug_get_info(char *buffer, char **start, off_t offset, int length IPSEC_PROC_LAST_ARG){ int len = 0; off_t begin = 0; KLIPS_PRINT(debug_tunnel & DB_TN_PROCFS, "klips_debug:ipsec_klipsdebug_get_info: " "buffer=0p%p, *start=0p%p, offset=%d, length=%d\n", buffer, *start, (int)offset, length); len += ipsec_snprintf(buffer+len, length-len, "debug_tunnel=%08x.\n", debug_tunnel); len += ipsec_snprintf(buffer+len, length-len, "debug_xform=%08x.\n", debug_xform); len += ipsec_snprintf(buffer+len, length-len, "debug_eroute=%08x.\n", debug_eroute); len += ipsec_snprintf(buffer+len, length-len, "debug_spi=%08x.\n", debug_spi); len += ipsec_snprintf(buffer+len, length-len, "debug_radij=%08x.\n", debug_radij); len += ipsec_snprintf(buffer+len, length-len, "debug_esp=%08x.\n", debug_esp); len += ipsec_snprintf(buffer+len, length-len, "debug_ah=%08x.\n", debug_ah); len += ipsec_snprintf(buffer+len, length-len, "debug_rcv=%08x.\n", debug_rcv); len += ipsec_snprintf(buffer+len, length-len, "debug_pfkey=%08x.\n", debug_pfkey); *start = buffer + (offset - begin); /* Start of wanted data */ len -= (offset - begin); /* Start slop */ if (len > length) len = length; return len;}#endif /* CONFIG_KLIPS_DEBUG */IPSEC_PROCFS_DEBUG_NO_STATICintipsec_stats_get_int_info(char *buffer, char **start, off_t offset, int length, int *eof, void *data){ const int max_content = length > 0? length-1 : 0; int len = 0; int *thing; thing = (int *)data; len = ipsec_snprintf(buffer+len, length-len, "%08x\n", *thing); if (len >= max_content) len = max_content; /* truncate crap */ *start = buffer + offset; /* Start of wanted data */ return len > offset? len - offset : 0;}#ifndef PROC_FS_2325struct proc_dir_entry ipsec_eroute ={ 0, 12, "ipsec_eroute", S_IFREG | S_IRUGO, 1, 0, 0, 0, &proc_net_inode_operations,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -