Beispiel #1
0
static int dnsmq_ctrl(struct file *file, const char *buffer, unsigned long length, void *data)
{
	char s[32];
	char *ptr;
	int i, j;

	// "[dnsmq ip] [dnsmq name]
	if ((length > 0) && (length < 32)) {
		memcpy(s, buffer, length);
		s[length] = 0;
		for(i=0;i<length;i++) {
			if (s[i] == ' ') break;
		}
		if (i<length) {
			s[i] = 0;
			ptr = s + i + 1;
			dnsmq_ip = simple_strtoul(s, NULL, 16);
//			ipv6_addr_set_v4mapped(dnsmq_ip, &dnsmq_ipv6);

			// convert to dnsname format
			j=0;
			for(;i<length;i++) {
				if (s[i] == '.') {
					s[i]=0;
					dnsmq_name[j]=strlen(ptr);
					memcpy(dnsmq_name+j+1, ptr, strlen(ptr));
					j += strlen(ptr) + 1;
					ptr = s + i + 1;
				}
			}
			dnsmq_name[j]=strlen(ptr);
			memcpy(dnsmq_name+j+1, ptr, strlen(ptr));
			dnsmq_name[j+1+strlen(ptr)]=0;
		}
	}
	else dnsmq_ip=0;

	printk("dnsmq ctrl: %x %s\n", dnsmq_ip, dnsmq_name);

	if (dnsmq_ip == 0) dnsmq_hit_hook_func (NULL);
	else dnsmq_hit_hook_func(dnsmq_func);

	return length;
}
Beispiel #2
0
static int dnsmq_ctrl_ipv6(struct file *file, const char *buffer, unsigned long length, void *data)
{
	char s[64];
	char *ptr;
	int i, j;

	// "[dnsmq ipv6] [dnsmq name]
	if ((length > 0) && (length < 64)) {
		memcpy(s, buffer, length);
		s[length] = 0;
		for(i=0;i<length;i++) {
			if (s[i] == ' ') break;
		}
		if (i<length) {
			s[i] = 0;
			ptr = s + i + 1;
			in6_pton(s, length, (void *)&dnsmq_ipv6, '\n', NULL);

			// convert to dnsname format
			j=0;
			for(;i<length;i++) {
				if (s[i] == '.') {
					s[i]=0;
					dnsmq_name_ipv6[j]=strlen(ptr);
					memcpy(dnsmq_name_ipv6+j+1, ptr, strlen(ptr));
					j += strlen(ptr) + 1;
					ptr = s + i + 1;
				}
			}
			dnsmq_name_ipv6[j]=strlen(ptr);
			memcpy(dnsmq_name_ipv6+j+1, ptr, strlen(ptr));
			dnsmq_name_ipv6[j+1+strlen(ptr)]=0;
		}
	}
	else memset(&dnsmq_ipv6, 0, sizeof(struct in6_addr));

	printk(KERN_DEBUG "dnsmq ctrl ipv6: %pI6 %s\n", &dnsmq_ipv6, dnsmq_name_ipv6);

	if (ipv6_addr_equal(&dnsmq_ipv6, &in6addr_any)) dnsmq_hit_hook_func (NULL);
	else dnsmq_hit_hook_func(dnsmq_func);

	return length;
}
Beispiel #3
0
static int __init init(void)
{
#ifdef CONFIG_PROC_FS
	struct proc_dir_entry *p;

	p = create_proc_entry("dnsmqctrl", 0200, init_net.proc_net);

	if (p) {
		//p->owner = THIS_MODULE;
		p->write_proc = dnsmq_ctrl;
	}
#endif
	// it will be enabled later
	dnsmq_hit_hook_func (NULL);
	return 0;
}
Beispiel #4
0
static void __exit fini(void)
{
	dnsmq_hit_hook_func (NULL);
}