Skip to content
/ ramp Public

RAMP provides a unified system for marking and identifying communication endpoints across physical and digital domains, designed specifically for hacker spaces, maker labs and technical gatherings like the Chaos Communication Congress.

License

Notifications You must be signed in to change notification settings

gretel/ramp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“‘ RAMP: Resource Access Marking Protocol

πŸ” Overview

RAMP provides a unified system for marking and identifying communication endpoints across physical and digital domains, designed specifically for hacker spaces, maker labs and technical gatherings like the Chaos Communication Congress.

πŸ—οΈ Core Architecture

Basic syntax:

[~]<layer>/<protocol>[:<param1>[/<param2>]][#<metadata>]

Where ~ prefix indicates a person reference (e.g. ~N/I:10.0.0.1/24#NOC-LEAD)

Where:

  • layer: Single uppercase letter [A-Z]
  • protocol: Single uppercase letter [A-Z]
  • param1, param2: Protocol-specific parameter format
  • metadata: Uppercase alphanumeric with hyphens [A-Z0-9-]
  • [] denotes optional components

Example: P/L:433.500MHz/SF7#MESHNODE

Label Format

Standard sticker (40x40mm):

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚ <- 12x12mm QR code
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ P/L:433.500M   β”‚ <- 8pt monospace
β”‚ /SF7#NODE01    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ“‘  LoRa     β”‚ <- 10pt sans-serif
β”‚   Node #01     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

URI Format

ramp://<layer>/<protocol>[:<param1>[/<param2>]][#<metadata>]
  • URI-unsafe characters must be percent-encoded
  • Parameters and metadata are case-preserved
  • Fragment (#) cannot contain additional fragments

🌐 Protocol Stack Examples

Basic Layer Model

graph TB
    L0[Physical Layer: P] -->|Raw transmission| L1[Network Layer: N]
    L1 -->|Protocol| L2[Application Layer: A]

    style L0 fill:#1a73e8,color:white
    style L1 fill:#34a853,color:white 
    style L2 fill:#ea4335,color:white
Loading

Examples

Remote Shell Access

graph TB
   P1[P/L:433.500MHz/SF7] -->|Mesh Node| N1[N/R:a1b2c3d4]
   N1 -->|Transport| A1[A/X:shell#1337]

   style P1 fill:#1a73e8,color:white
   style N1 fill:#34a853,color:white
   style A1 fill:#ea4335,color:white
Loading

Remote system access over LoRa-based Reticulum mesh. SF7 spreading factor balances range and speed.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ P/L:433.500M   β”‚
β”‚ /SF7#SHELL01   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ“‘  LoRa     β”‚
β”‚   Shell #01    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

DMR Repeater System

graph TB
    P1[P/R:145.500MHz] -->|Input| N1[N/D:317523]
    N1 -->|Controller| P2[P/R:145.900MHz]
    P2 -->|Output| A1[A/M:@rprt145]

    style P1 fill:#1a73e8,color:white
    style N1 fill:#34a853,color:white
    style P2 fill:#1a73e8,color:white
    style A1 fill:#ea4335,color:white
Loading

DMR voice repeater with Matrix status updates. Input 145.500MHz, output 145.900MHz, monitoring via Matrix.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ P/R:145.500M   β”‚
β”‚ #RPRT317523    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ“»  DMR      β”‚
β”‚ Repeater #01   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Protocol Mappings

Parameter Validation Rules

VALIDATION = {
    # Physical parameters
    'freq': r'^\d{3}\.\d{3}[MG]Hz$',     # e.g., 433.500MHz
    'sf': r'^SF\d{1,2}$',                 # e.g., SF7
    'mac': r'^([0-9A-F]{2}:){5}[0-9A-F]{2}$',  # MAC address
    'channel': r'^\d{1,3}$',              # e.g., 36
    'speed': r'^\d+[KMGT]$',              # e.g., 100M
    
    # Network parameters
    'ipv4': r'^\d{1,3}(\.\d{1,3}){3}$',   # IPv4 address
    'ipv6': r'^[0-9a-fA-F:]+$',           # IPv6 address
    'port': r'^\d{1,5}$',                 # Port number
    'hash': r'^[0-9a-f]{64}$',            # SHA-256 hash
    
    # Application parameters
    'user': r'^@?[a-zA-Z0-9_.-]+$',       # Username
    'room': r'^[#!][a-zA-Z0-9_.-]+$',     # Room identifier
    'host': r'^[a-zA-Z0-9.-]+$'           # Hostname
}

Physical Layer (P)

PHYSICAL = {
    # Radio
    'L': {'name': 'LoRa',      'params': '<freq>/<preset>',  'note': 'πŸ“‘ Long Range Radio',
       'presets': {
           'ST': {'name': 'Short Turbo',    'sf': 7,  'bw': 500, 'cr': '4/5', 'dr': 21.88},
           'SF': {'name': 'Short Fast',     'sf': 7,  'bw': 250, 'cr': '4/5', 'dr': 10.94},
           'SS': {'name': 'Short Slow',     'sf': 8,  'bw': 250, 'cr': '4/5', 'dr': 6.25},
           'MF': {'name': 'Medium Fast',    'sf': 9,  'bw': 250, 'cr': '4/5', 'dr': 3.52},
           'MS': {'name': 'Medium Slow',    'sf': 10, 'bw': 250, 'cr': '4/5', 'dr': 1.95},
           'LF': {'name': 'Long Fast',      'sf': 11, 'bw': 250, 'cr': '4/5', 'dr': 1.07},
           'LM': {'name': 'Long Moderate',  'sf': 11, 'bw': 125, 'cr': '4/8', 'dr': 0.34},
           'LS': {'name': 'Long Slow',      'sf': 12, 'bw': 125, 'cr': '4/8', 'dr': 0.18},
           'VLS':{'name': 'Very Long Slow', 'sf': 12, 'bw': 62.5,'cr': '4/8', 'dr': 0.09}
       }},
    'R': {'name': 'RF',        'params': '<freq>/<mode>', 'note': 'πŸ“» Generic Radio'},
    'W': {'name': 'WiFi',      'params': '<channel>/<width>', 'note': 'πŸ“Ά WiFi Radio'},
    'B': {'name': 'BLE',       'params': '<mac>/<type>', 'note': '🦷 Bluetooth Low Energy'},
    'Z': {'name': 'Zigbee',    'params': '<channel>/<panid>', 'note': 'πŸ•ΈοΈ Zigbee Radio'},
    
    # Wired
    'E': {'name': 'Ethernet',  'params': '<speed>/<duplex>', 'note': 'πŸ”Œ Wired Network'},
    'S': {'name': 'Serial',    'params': '<baud>/<config>', 'note': 'πŸ”€ Serial Data'},
    'U': {'name': 'USB',       'params': '<version>/<class>', 'note': 'πŸ”Œ Universal Serial Bus'},
    'C': {'name': 'CAN',       'params': '<speed>/<format>', 'note': 'πŸš— Controller Area Network'},
    
    # Special
    'Q': {'name': 'QR',        'params': '<size>/<format>', 'note': 'πŸ“± QR Code Resource'},
    'O': {'name': 'Optical',   'params': '<wavelength>/<power>', 'note': 'πŸ”¦ Light-based'},
    'N': {'name': 'NFC',       'params': '<type>/<mode>', 'note': 'πŸ“± Near Field Comms'},
    'A': {'name': 'Audio',     'params': '<freq>/<channels>', 'note': 'πŸ”Š Sound-based'},
    'Q': {'name': 'QAM',       'params': '<points>/<rate>', 'note': '〰️ RF Modulation'},
    'V': {'name': 'Visual',    'params': '<format>/<fps>', 'note': 'πŸ‘οΈ Visual Light Comms'}
}

Network Layer (N)

NETWORK = {
    # Internet Infrastructure
    'A': {'name': 'AS',        'params': '<asn>/<prefix>', 'note': '🌐 Autonomous System'},
    'I': {'name': 'IPv4',      'params': '<net>/<mask>', 'note': '🌐 Internet Protocol v4'},
    '6': {'name': 'IPv6',      'params': '<net>/<prefix>', 'note': '🌐 Internet Protocol v6'},
    'T': {'name': 'TCP',       'params': '<port>/<service>', 'note': 'πŸ”Œ Transport Control'},
    'U': {'name': 'UDP',       'params': '<port>/<service>', 'note': 'πŸ”Œ User Datagram'},
    
    # Amateur Radio
    'P': {'name': 'POCSAG',    'params': '<ric>/<type>', 'note': 'πŸ“Ÿ Paging Protocol'},
    'D': {'name': 'DMR',       'params': '<id>/<tg>', 'note': 'πŸŽ™οΈ Digital Mobile Radio'},
    'X': {'name': 'AX.25',     'params': '<callsign>/<ssid>', 'note': 'πŸ“‘ Packet Radio'},
    
    # Mesh/P2P
    'M': {'name': 'Meshtastic','params': '<id>/<channel>', 'note': 'πŸ•ΈοΈ Meshtastic Mesh'},
    'R': {'name': 'Reticulum', 'params': '<hash>/<type>', 'note': 'πŸ•ΈοΈ Reticulum Mesh'},
    'Y': {'name': 'Yggdrasil', 'params': '<addr>/<subnet>', 'note': '🌳 Yggdrasil Network'},
    'C': {'name': 'cjdns',     'params': '<pubkey>/<peers>', 'note': 'πŸ•ΈοΈ cjdns Mesh'},
    'H': {'name': 'HAMnet',    'params': '<call>/<subnet>', 'note': 'πŸ“‘ Amateur Radio Network'},
    
    # Overlay Networks  
    'O': {'name': 'Tor',       'params': '<onion>/<port>', 'note': 'πŸ§… Tor Network',
          'types': {'HS': 'Hidden Service', 'NODE': 'Relay Node', 'DIR': 'Directory'}},
    'N': {'name': 'I2P',       'params': '<b32>/<port>', 'note': 'πŸ§… I2P Network'},
    'L': {'name': 'IPFS',      'params': '<cid>/<path>', 'note': 'πŸ“¦ InterPlanetary FS'},
}
}

Application Layer (A)

APPLICATION = {
    # Communication
    'M': {'name': 'Matrix',    'params': '<user>/<room>', 'note': 'πŸ’¬ Matrix Protocol'},
    'X': {'name': 'XMPP',      'params': '<jid>/<muc>', 'note': 'πŸ’¬ XMPP Protocol'},
    'I': {'name': 'IRC',       'params': '<server>/<channel>', 'note': 'πŸ’¬ Internet Relay Chat',
         'uri': 'irc://<server>[:<port>]/<channel>[,<key>]'},
    'L': {'name': 'LXMF',      'params': '<hash>/<type>', 'note': 'πŸ“¨ LXMF Messaging'},
    'E': {'name': 'Email',     'params': '<addr>/<transport>', 'note': 'πŸ“§ Email Protocol'},
    
    # Services
    'H': {'name': 'HTTP',      'params': '<host>/<path>', 'note': '🌐 Web Service'},
    'G': {'name': 'Gemini',    'params': '<host>/<path>', 'note': 'πŸš€ Gemini Protocol'},
    'S': {'name': 'SIP',       'params': '<uri>/<transport>', 'note': '☎️ Voice Over IP'},
    'F': {'name': 'FTP',       'params': '<host>/<path>', 'note': 'πŸ“‚ File Transfer'},
    'N': {'name': 'NNTP',      'params': '<host>/<group>', 'note': 'πŸ“° Usenet News'},
    
    # Security
    'P': {'name': 'PGP',       'params': '<keyid>/<algo>', 'note': 'πŸ” PGP Keys'},
    'O': {'name': 'OTR',       'params': '<fp>/<version>', 'note': '🀫 Off The Record'},
    'W': {'name': 'WireGuard', 'params': '<pubkey>/<port>', 'note': 'πŸ”’ VPN Tunnel'},
    
    # Special Purpose
    'T': {'name': 'Telemetry', 'params': '<sensor>/<interval>', 'note': 'πŸ“Š Sensor Data'},
    'D': {'name': 'DNS',       'params': '<name>/<type>', 'note': 'πŸ“– Name Service'},
    'B': {'name': 'Bitcoin',   'params': '<addr>/<network>', 'note': 'β‚Ώ Cryptocurrency'},
    'R': {'name': 'Radio',     'params': '<freq>/<mode>', 'note': 'πŸ“» Amateur Radio'},
    'Z': {'name': 'ZeroMQ',    'params': '<socket>/<pattern>', 'note': 'πŸ”„ Message Queue'}
}

πŸŽͺ Congress Example Labels

WiFi Access Point:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ P/W:36/160     β”‚
β”‚ #NOC.AP.12     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ“Ά  WiFi     β”‚
β”‚   NOC AP 12    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Network Segment:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ N/I:10.128.0.0 β”‚
β”‚ /16#HACKCTR    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   🌐  Net      β”‚
β”‚  Hack Center   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

NOC Reference:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ~N/I:10.128    β”‚
β”‚ /16#NOC-LEAD   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ‘€  Net      β”‚
β”‚   NOC Lead     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

QR Resource:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ P/Q:128/WIFI   β”‚
β”‚ #GUEST-NET     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ“±  QR       β”‚
β”‚  WiFi Access   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tor Hidden Service:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ N/O:xmpl23...  β”‚
β”‚ /80#HS.01      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ§…  Tor      β”‚
β”‚  Hidden Svc    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Badge Charging:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      [QR]      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ P/U:2.0/CDC    β”‚
β”‚ #CHARGE.05     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ”Œ  USB      β”‚
β”‚ Charging #05   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

About

RAMP provides a unified system for marking and identifying communication endpoints across physical and digital domains, designed specifically for hacker spaces, maker labs and technical gatherings like the Chaos Communication Congress.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages