Skip to content

Instantly share code, notes, and snippets.

@yunazuno
yunazuno / ts_delete_devices.sh
Created April 15, 2022 10:21
Delete all devices on the Tailnet except for no expiry devices
#!/bin/bash
# Delete all devices on the Tailnet except for no expiry devices
# Released under the MIT license
set -eo pipefail
TAILSCALE_TAILNET=${TAILSCALE_TAILNET:-}
TAILSCALE_API_KEY=${TAILSCALE_API_KEY:-}
SCRIPT_REAL_RUN=${SCRIPT_REAL_RUN:false}
if [ -z "${TAILSCALE_API_KEY}" ]; then
@yunazuno
yunazuno / drop_ipv4_tcp_80.c
Last active November 2, 2023 09:21
Testing a XDP program with BPF_PROG_TEST_RUN through Python
#include <uapi/linux/if_ether.h>
#include <uapi/linux/in.h>
#include <uapi/linux/ip.h>
#include <uapi/linux/tcp.h>
int drop_ipv4_tcp_80(struct xdp_md *ctx) {
void *data = (void *)(long)ctx->data;
void *data_end = (void *)(long)ctx->data_end;
struct ethhdr *eth;
@yunazuno
yunazuno / tcl3switch.py
Created July 8, 2018 07:40
PoC: Offloading L3 FIB into a NIC hardware through tc
#!/usr/bin/env python3
import pyroute2
import socket
from pyroute2.netlink import rtnl
import subprocess
import time
from operator import itemgetter
class TCL3Switch(object):
@yunazuno
yunazuno / ethtool.py
Last active March 12, 2024 10:51
ethtool -S in Python
#!/usr/bin/env python
import socket
import fcntl
import struct
import array
SIOCETHTOOL = 0x8946
ETHTOOL_GSTRINGS = 0x0000001b
ETHTOOL_GSSET_INFO = 0x00000037
ETHTOOL_GSTATS = 0x0000001d
@yunazuno
yunazuno / description.md
Last active October 27, 2017 11:42
In Consul v0.8.4 or later, `consul watch -type event HANDLER` gives same events several time to the `HANDLER`.

Summary

In Consul v0.8.4 or later, consul watch -type event HANDLER gives same events several time to the HANDLER.

Reproduction steps

  1. Invoke consul watch -type event HANDLER to wait events
  2. Invoke consul event -name "foo" several time to fire events

Expected result

import hashlib
class MaglevHash(object):
def __init__(self, m=65537):
self.m = m
self.permutation = {}
self.entry = [None] * self.m
def add(self, node):
@yunazuno
yunazuno / drop_80_8080.c
Last active August 26, 2022 15:15
XDP: drop 80/tcp and 8080/tcp
#define KBUILD_MODNAME "xdp_drop_80_8080"
#include <uapi/linux/bpf.h>
#include <linux/in.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <linux/if_vlan.h>
#include <linux/ip.h>
#include <linux/ipv6.h>
BPF_HASH(counter, uint32_t, long);
@yunazuno
yunazuno / dns64.py
Created September 2, 2015 05:29
A DNS64 resolver with AAAA filter-like behavior (similar to the Internet Shareing on OSX El Capitan)
#!/usr/bin/env python2
from twisted.internet import reactor
from twisted.names import client, dns, server
import ipaddr
import socket
class SixFourResolver(client.Resolver):
def __init__(
self,
[root@HOSTNAME:~]# netstat -natup
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
(snip)
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 38681/java
tcp 0 0 127.0.0.1:48176 127.0.0.1:8080 ESTABLISHED 38681/java
tcp 71 0 127.0.0.1:8080 127.0.0.1:48176 ESTABLISHED 38681/java
[testuser@HOSTNAME norikra]$ uname -a
Linux HOSTNAME 2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[testuser@HOSTNAME norikra]$ cat /etc/redhat-release
CentOS release 6.5 (Final)
[testuser@HOSTNAME norikra]$ rbenv version
jruby-1.7.17 (set by RBENV_VERSION environment variable)
[testuser@HOSTNAME norikra]$ jruby --version
jruby 1.7.17 (1.9.3p392) 2014-12-09 fafd1a7 on OpenJDK 64-Bit Server VM 1.7.0_65-mockbuild_2014_07_16_06_06-b00 +jit [linux-amd64]
[testuser@HOSTNAME norikra]$ gem list