Merge pull request 'default-make-full' (#4) from refactor-full-make into main
Reviewed-on: #4
This commit is contained in:
commit
46cea4f818
32
config.sh
32
config.sh
|
|
@ -16,19 +16,19 @@ CONFIG_HAVE_DVBAPI=y
|
||||||
CONFIG_WITH_EXTENDED_CW=y
|
CONFIG_WITH_EXTENDED_CW=y
|
||||||
# CONFIG_WITH_NEUTRINO=n
|
# CONFIG_WITH_NEUTRINO=n
|
||||||
CONFIG_READ_SDT_CHARSETS=y
|
CONFIG_READ_SDT_CHARSETS=y
|
||||||
# CONFIG_CS_ANTICASC=n
|
CONFIG_CS_ANTICASC=y
|
||||||
CONFIG_WITH_DEBUG=y
|
CONFIG_WITH_DEBUG=y
|
||||||
CONFIG_MODULE_MONITOR=y
|
CONFIG_MODULE_MONITOR=y
|
||||||
CONFIG_WITH_LB=y
|
CONFIG_WITH_LB=y
|
||||||
# CONFIG_CS_CACHEEX=n
|
CONFIG_CS_CACHEEX=y
|
||||||
# CONFIG_CS_CACHEEX_AIO=n
|
CONFIG_CS_CACHEEX_AIO=y
|
||||||
# CONFIG_CW_CYCLE_CHECK=n
|
CONFIG_CW_CYCLE_CHECK=y
|
||||||
# CONFIG_LCDSUPPORT=n
|
CONFIG_LCDSUPPORT=y
|
||||||
# CONFIG_LEDSUPPORT=n
|
CONFIG_LEDSUPPORT=y
|
||||||
# CONFIG_CLOCKFIX=n
|
CONFIG_CLOCKFIX=y
|
||||||
# CONFIG_IPV6SUPPORT=n
|
CONFIG_IPV6SUPPORT=y
|
||||||
# CONFIG_WITH_ARM_NEON=n
|
# CONFIG_WITH_ARM_NEON=n
|
||||||
# CONFIG_WITH_SIGNING=n
|
CONFIG_WITH_SIGNING=y
|
||||||
CONFIG_WITH_EMU=y
|
CONFIG_WITH_EMU=y
|
||||||
CONFIG_WITH_SOFTCAM=y
|
CONFIG_WITH_SOFTCAM=y
|
||||||
# CONFIG_MODULE_CAMD33=n
|
# CONFIG_MODULE_CAMD33=n
|
||||||
|
|
@ -38,13 +38,13 @@ CONFIG_MODULE_NEWCAMD=y
|
||||||
CONFIG_MODULE_CCCAM=y
|
CONFIG_MODULE_CCCAM=y
|
||||||
CONFIG_MODULE_CCCSHARE=y
|
CONFIG_MODULE_CCCSHARE=y
|
||||||
CONFIG_MODULE_GBOX=y
|
CONFIG_MODULE_GBOX=y
|
||||||
# CONFIG_MODULE_RADEGAST=n
|
CONFIG_MODULE_RADEGAST=y
|
||||||
# CONFIG_MODULE_SERIAL=n
|
CONFIG_MODULE_SERIAL=y
|
||||||
# CONFIG_MODULE_CONSTCW=n
|
CONFIG_MODULE_CONSTCW=y
|
||||||
# CONFIG_MODULE_PANDORA=n
|
CONFIG_MODULE_PANDORA=y
|
||||||
# CONFIG_MODULE_SCAM=n
|
CONFIG_MODULE_SCAM=y
|
||||||
# CONFIG_MODULE_GHTTP=n
|
CONFIG_MODULE_GHTTP=y
|
||||||
# CONFIG_MODULE_STREAMRELAY=n
|
CONFIG_MODULE_STREAMRELAY=y
|
||||||
CONFIG_WITH_CARDREADER=y
|
CONFIG_WITH_CARDREADER=y
|
||||||
CONFIG_READER_NAGRA_COMMON=y
|
CONFIG_READER_NAGRA_COMMON=y
|
||||||
CONFIG_READER_NAGRA=y
|
CONFIG_READER_NAGRA=y
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,153 @@ static const struct wiki_entry wiki_entries[] = {
|
||||||
{ .param = "Users", .config = "ratelimit", .section = "", .text = "- Limits may be too restrictive\n- Increase `ratelimitecm` value\n- Increase `ratelimitseconds` interval\n- Reduce `srvidholdseconds` hold time", .status = 0 },
|
{ .param = "Users", .config = "ratelimit", .section = "", .text = "- Limits may be too restrictive\n- Increase `ratelimitecm` value\n- Increase `ratelimitseconds` interval\n- Reduce `srvidholdseconds` hold time", .status = 0 },
|
||||||
{ .param = "Abuse", .config = "ratelimit", .section = "", .text = "- Limits may be too lenient\n- Decrease `ratelimitecm` value\n- Decrease `ratelimitseconds` interval\n- Increase `srvidholdseconds` hold time", .status = 0 },
|
{ .param = "Abuse", .config = "ratelimit", .section = "", .text = "- Limits may be too lenient\n- Decrease `ratelimitecm` value\n- Decrease `ratelimitseconds` interval\n- Increase `srvidholdseconds` hold time", .status = 0 },
|
||||||
{ .param = "Legitimate", .config = "ratelimit", .section = "", .text = "- Review actual usage patterns\n- Adjust limits to accommodate normal behavior\n- Consider different limits for trusted users\n- Use per-user limits in oscam.user instead", .status = 0 },
|
{ .param = "Legitimate", .config = "ratelimit", .section = "", .text = "- Review actual usage patterns\n- Adjust limits to accommodate normal behavior\n- Consider different limits for trusted users\n- Use per-user limits in oscam.user instead", .status = 0 },
|
||||||
|
{ .param = "Parameters", .config = "ac", .section = "", .text = "- **CAID**: Conditional Access Identification - numeric identifier for the encryption provider\n- **provider ID**: Numeric identifier for the Pay TV provider\n- **seconds**: Time interval in seconds defining the minimum time between control word changes\n\nThe asterisk (*) can be used to define a default value for all providers not explicitly listed.", .status = 0 },
|
||||||
|
{ .param = "Basic", .config = "ac", .section = "", .text = "```\n0100:000000=10\n*=7\n```\n\nFor CAID 0100 with provider 000000, the time interval is set to 10 seconds. For all other CAIDs not explicitly defined, the default interval is 7 seconds.", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "ac", .section = "", .text = "```\n1702:000000 = 7 # Sky S02 - 7 second interval\n1833:000401 = 7 # HD+ - 7 second interval\n*=7 # Default 7 seconds for all other providers\n```", .status = 0 },
|
||||||
|
{ .param = "Alternative", .config = "ac", .section = "", .text = "```\n1702:000000 = 10 # Sky S02 - 10 second interval\n1833:000401 = 10 # HD+ - 10 second interval\n*=7 # Default 7 seconds for all other providers\n```", .status = 0 },
|
||||||
|
{ .param = "Multiple", .config = "ac", .section = "", .text = "```\n0100:000000=10 # Provider 1 - 10 seconds\n0200:000001=8 # Provider 2 - 8 seconds\n0300:000002=12 # Provider 3 - 12 seconds\n*=7 # Default for all others\n```", .status = 0 },
|
||||||
|
{ .param = "Choosing", .config = "ac", .section = "", .text = "- Typical intervals range from 7 to 10 seconds\n- Shorter intervals (5-7 seconds) provide stricter anti-cascading protection\n- Longer intervals (10-15 seconds) are more lenient but may miss some cascading attempts\n- Consider the normal channel switching behavior of legitimate users", .status = 0 },
|
||||||
|
{ .param = "Configuration", .config = "ac", .section = "", .text = "1. Start with a default value using the wildcard (*) entry\n2. Add specific entries for high-value providers that need stricter control\n3. Test the configuration to ensure legitimate users aren't affected\n4. Monitor logs for potential cascading attempts", .status = 0 },
|
||||||
|
{ .param = "Common", .config = "ac", .section = "", .text = "- **1702:000000**: Sky Germany (S02 cards)\n- **1833:000401**: HD+ Germany\n- **0100:000000**: Seca/Mediaguard systems\n- **0500:000000**: Viaccess systems\n- **0D95:000000**: ORF ICE", .status = 0 },
|
||||||
|
{ .param = "label", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nName for reader.\n\n**Format:**\n```ini\nlabel = name\n```\n\n**Example:**\n```ini\nlabel = easymouse2\n```", .status = 0 },
|
||||||
|
{ .param = "description", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` compilation flag)**\n\nDescription of reader (text).\n\n**Format:**\n```ini\ndescription = text\n```\n\n**Example:**\n```ini\ndescription = My main card reader\n```\n\n**Default:**\n```ini\ndescription =\n```", .status = 0 },
|
||||||
|
{ .param = "enable", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDeactivate reader.\n\n```ini\nenable = 0 # off\nenable = 1 # on (default)\n```\n\n**Format:**\n```ini\nenable = 0|1\n```\n\n**Example:**\n```ini\nenable = 0\n```\n\n**Default:**\n```ini\nenable = 1\n```", .status = 0 },
|
||||||
|
{ .param = "protocol", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nReader protocol.\n\n**Values:**\n```ini\nprotocol = mouse # Local cardreader\n = internal # All cardreader with \"device=/dev/sciX\", and internal Coolstream-Reader\n = camd35 # Cascading - camd 3.5-compatible remote server - UDP\n = cs357x # Cascading - camd 3.5-compatible remote server - UDP\n = mp35\n = smartreader\n = serial\n = cs378x # Camd 3.5-compatible remote server - TCP\n = gbox\n = newcamd # newcamd protocol\n = newcamd525\n = newcamd524\n = cccam\n = radegast\n = pcsc\n = constcw\n = sc8in1\n = smargo\n```", .status = 0 },
|
||||||
|
{ .param = "device", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nDefine local or remote reader.\n\n**Syntax:**\n```ini\ndevice = [<readertype>;]serial:serialnum|bus:device|<device|device:slot>|<ip|hostname>,<port>[,<lport>]|pcsc|<0|1>|constantcw\n```\n\n**Reader Types:**\n- `SR:` Smartreader+ (default)\n- `SRv2:` Smartreader V2\n- `Infinity:` Infinity USB\n- `TripleP1:` Smargo Triple Reader port 1\n- `TripleP2:` Smargo Triple Reader port 2\n- `TripleP3:` Smargo Triple Reader port 3\n\n**Device Formats:**\n- `bus:device` - Bus name and device name of the smartreader+ (get the name with lsusb 'Bus' and 'Device')\n- `serialnum` - Serial number of Smartreader+ or Infinity USB (get the serial number while starting OSCam)\n- `device` - Device name\n- `device:slot` - Device name and slot number sc8in1 (1-8), only one sc8in1 reader supported\n- `ip|hostname` - IP address or host name\n- `port` - TCP/IP port\n- `lport` - Remapping to local TCP/IP port\n- `PCSC` - Number of PCSC reader, starting with 0. Alternative: select via reader name (part), e.g., \"-1:SCR 3310\" (names of detected readers are shown by \"oscam -d 32\")\n- `0|1` - **For Coolstream HD-1 STB only:** select reader 0 or reader 1\n- `constantcw` - Constant CW file name\n\n**CW File Format:**\n\n*Standard:*\n```\nCAID:Provider ID:Service ID:PMT ID:ECM PID::key (16 Bytes separated by spaces)\n```\nExample:\n```\n1234:123456:1234:2345:3456::00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n```\n\n*Extended OSCam-Format:*\n```\nCAID:Provider ID:Service ID:PMT ID:ECM PID:Video PID:key (16 Bytes separated by spaces)\n```\nExample:\n```\n1234:123456:1234:2345:3456:7890:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n```\n\n**Examples:**\n```ini\ndevice = /dev/ttyS0 # Reader on COM1 (Linux i386 and Windows)\ndevice = /dev/tts/1 # Reader on COM2 (Linux dbox2 with multicam)\ndevice = /dev/ttyUSB0 # Reader on USB (Linux i386)\ndevice = /dev/ttyUSB0:1 # Slot 1 SC8in1 or MCR 4/8 (Linux i386)\n```\n\n⚠️ **Attention:** Counting begins with 0, that means number of device is one less than number of COM-Port! E.g., ttyS0 = COM1, tts/1 = COM2.", .status = 0 },
|
||||||
|
{ .param = "ipv4force", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForce IPv4 connection for this reader even when IPv6 is available.\n\n```ini\nipv4force = 0 # use IPv6 if available (default)\nipv4force = 1 # force IPv4 only\n```\n\n**Format:**\n```ini\nipv4force = 0|1\n```\n\n**Example:**\n```ini\nipv4force = 1\n```\n\n**Default:**\n```ini\nipv4force = 0\n```", .status = 0 },
|
||||||
|
{ .param = "key", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nKey for newcamd remote reader encryption.\n\n**Format:**\n```ini\nkey = 14_hex_bytes\n```\n\n**Example:**\n```ini\nkey = 0102030405060708091011121314\n```\n\n**Default:**\n```ini\nkey =\n```", .status = 0 },
|
||||||
|
{ .param = "user", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUser for remote reader (name).\n\n**Format:**\n```ini\nuser = username\n```\n\n**Example:**\n```ini\nuser = username\n```\n\n**Default:**\n```ini\nuser =\n```", .status = 0 },
|
||||||
|
{ .param = "password", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPassword for remote reader.\n\n**Format:**\n```ini\npassword = secret\n```\n\n**Example:**\n```ini\npassword = secret\n```\n\n**Default:**\n```ini\npassword =\n```", .status = 0 },
|
||||||
|
{ .param = "pincode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPincode for **Conax, Cryptoworks and Viaccess** SCs.\n\n**Example:**\n```ini\npincode = 1234\n```\n\n**Default:**\n```ini\npincode =\n```", .status = 0 },
|
||||||
|
{ .param = "readnano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nWrite file (usually a copy of a file saved by `savenano`) to your smartcard. If no path is specified, the specified file is searched for in the configuration directory. Only valid for physical readers!\n\n**Examples:**\n```ini\nreadnano = write.emm\n = /var/oscam/write.emm\n = # Blank (default)\n```", .status = 0 },
|
||||||
|
{ .param = "services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n⚠️ **Attention:** If loadbalancing is enabled in `oscam.conf [global]` among `lb_mode`, then there may be **no entries**!\n\n⚠️ **Attention:** The number of services that will be considered based reader, is limited to 64, or 64 times [service-name][CAID][provid][srvid]!\n\nAssignment to service group. This requires an `oscam.services` file to be present.\n\n**Logic (in this order):**\n1. If the field is empty (or invalid), the request is allowed.\n2. When a negative service (i.e., those with \"!\") is applicable, the request is rejected.\n3. If a positive service is applicable or there is no positive service, the request is allowed.\n4. If none of the previous points, the request is rejected.\n\nThis means that negative services are only necessary in individual cases - when services has positive entries, but you want to exclude some. This is not recommended, because misconfiguration can occur easily. Instead, create an additional service that contains all the relevant channels.\n\n**Syntax:**\n```ini\nservices = [!]service[,[!]service]...\n = # Blank (default)\n```", .status = 0 },
|
||||||
|
{ .param = "lb_whitelist_services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReader assignment to service group for channels which may never be blocked by the loadbalancer to the reader.\n\n**Syntax:**\n```ini\nlb_whitelist_services = <services>,<services>...\n```\n\n**Default:**\n```ini\nlb_whitelist_services =\n```", .status = 0 },
|
||||||
|
{ .param = "inactivitytimeout", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nInactivity timeout in seconds.\n\n```ini\ninactivitytimeout = -1 # Reconnect on network failure for newcamd based readers, even in idle\ninactivitytimeout = 0 # Default\n```\n\n**Format:**\n```ini\ninactivitytimeout = -1|0|seconds\n```\n\n**Example:**\n```ini\ninactivitytimeout = 300\n```\n\n**Default:**\n```ini\ninactivitytimeout = 0\n```", .status = 0 },
|
||||||
|
{ .param = "reconnecttimeout", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReconnect from a remote reader, if missing answers in seconds.\n\n**Format:**\n```ini\nreconnecttimeout = seconds\n```\n\n**Example:**\n```ini\nreconnecttimeout = 20\n```\n\n**Default:**\n```ini\nreconnecttimeout =\n```", .status = 0 },
|
||||||
|
{ .param = "reconnectdelay", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDelay in milliseconds before reconnecting to the remote server after a connection loss.\n\n**Format:**\n```ini\nreconnectdelay = milliseconds\n```\n\n**Example:**\n```ini\nreconnectdelay = 30000\n```\n\n**Default:**\n```ini\nreconnectdelay = 60000\n```", .status = 0 },
|
||||||
|
{ .param = "resetcycle", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of ECMs until SC reset is performed.\n\n⚠️ **Hint:** Valid for physical readers only!\n\n**Format:**\n```ini\nresetcycle = count\n```\n\n**Example:**\n```ini\nresetcycle = 5\n```\n\n**Default:**\n```ini\nresetcycle = 0\n```", .status = 0 },
|
||||||
|
{ .param = "disableserverfilter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nIgnore CAID and ident settings of reader due to faulty clients.\n\n```ini\ndisableserverfilter = 0 # Not ignore (default)\ndisableserverfilter = 1 # Ignore\n```\n\n**Format:**\n```ini\ndisableserverfilter = 0|1\n```\n\n**Example:**\n```ini\ndisableserverfilter = 1\n```\n\n**Default:**\n```ini\ndisableserverfilter = 0\n```", .status = 0 },
|
||||||
|
{ .param = "connectoninit", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAllow newcamd connections to be established on startup although there isn't a request yet.\n\n```ini\nconnectoninit = 0 # Default\nconnectoninit = 1 # Allow connection on init\n```\n\n**Format:**\n```ini\nconnectoninit = 0|1\n```\n\n**Example:**\n```ini\nconnectoninit = 1\n```\n\n**Default:**\n```ini\nconnectoninit = 0\n```", .status = 0 },
|
||||||
|
{ .param = "keepalive", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nKeep connection alive.\n\n```ini\nkeepalive = 0 # Always on if cacheex reader type (default)\nkeepalive = 1 # Allow cs378x TCP socket to be always connected\n```\n\n**Format:**\n```ini\nkeepalive = 0|1\n```\n\n**Example:**\n```ini\nkeepalive = 1\n```\n\n**Default:**\n```ini\nkeepalive = 0\n```", .status = 0 },
|
||||||
|
{ .param = "smargopatch", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable workaround for smartreader+ and reader until native mode works.\n\n```ini\nsmargopatch = 0 # Disabled (default)\nsmargopatch = 1 # Enabled\n```\n\n**Format:**\n```ini\nsmargopatch = 0|1\n```\n\n**Example:**\n```ini\nsmargopatch = 1\n```\n\n**Default:**\n```ini\nsmargopatch = 0\n```", .status = 0 },
|
||||||
|
{ .param = "autospeed", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAuto speed detection.\n\n```ini\nautospeed = 0 # Disabled\nautospeed = 1 # Enabled (default) - Sets mhz according to ATR\n```\n\nCurrently only used for smartreader, smargo protocol and Dreambox-readers internal protocol. Other readers will be adapted to use this parameter as well.\n\nIf you want to overclock your card, set autospeed to 0.\n\n**Format:**\n```ini\nautospeed = 0|1\n```\n\n**Example:**\n```ini\nautospeed = 0\n```\n\n**Default:**\n```ini\nautospeed = 1\n```", .status = 0 },
|
||||||
|
{ .param = "sc8in1_dtrrts_patch", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable fix for SC8in1/MCR DTR/RTS kernel bug.\n\n```ini\nsc8in1_dtrrts_patch = 0 # Disabled (default)\nsc8in1_dtrrts_patch = 1 # Enabled\n```\n\n**Format:**\n```ini\nsc8in1_dtrrts_patch = 0|1\n```\n\n**Example:**\n```ini\nsc8in1_dtrrts_patch = 1\n```\n\n**Default:**\n```ini\nsc8in1_dtrrts_patch = 0\n```", .status = 0 },
|
||||||
|
{ .param = "fallback", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine reader as fallback. Standard and fallback reader must have the same group (see **group** parameter)!\n\n```ini\nfallback = 0 # No fallback reader (default)\nfallback = 1 # Fallback reader\n```\n\n**Format:**\n```ini\nfallback = 0|1\n```\n\n**Example:**\n```ini\nfallback = 1\n```\n\n**Default:**\n```ini\nfallback = 0\n```", .status = 0 },
|
||||||
|
{ .param = "fallback_percaid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUse reader as fallback for defined CAIDs only. Two digit wildcards CAIDs are possible. `fallback_percaid` overrules `fallback`.\n\n**Syntax:**\n```ini\nfallback_percaid = <CAID>[:<ident>[,ident]]...[;<CAID>[:<ident>[,ident]]...]...\n```\n\n**Example:**\n```ini\nfallback_percaid = 1234:234567;10:345678\n```\n\n**Default:**\n```ini\nfallback_percaid =\n```", .status = 0 },
|
||||||
|
{ .param = "localcards", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUse this reader (for defined CAIDs only) as \"local\" in LB/reader selection. It will be handled as a local reader per LB and preferlocalcards settings. In this way, we can consider a network reader as local, like we had a cardreader.\n\n**Syntax:**\n```ini\nlocalcards = <CAID>[:<ident>[,ident]]...[;<CAID>[:<ident>[,ident]]...]...\n```", .status = 0 },
|
||||||
|
{ .param = "disablecrccws_only_for", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**Syntax:**\n```ini\ndisablecrccws_only_for = CAID:PROVID;CAID:PROVID\n```\n\n**Example:**\n```ini\ndisablecrccws_only_for = 0500:032830;098C:000000\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nEnable cache exchange mode for camd 3.5x and CCcam protocol.\n\n```ini\ncacheex = 0 # Disabled (default)\ncacheex = 1 # Enable cache exchange pull mode\ncacheex = 2 # Enable cache exchange push mode\ncacheex = 3 # Enable cache exchange reverse push mode\n```\n\n📋 See also on `oscam.user`!\n\n⚠️ Identical cache exchange modes must be set on local OSCam server and remote OSCam user account!\n\n**Format:**\n```ini\ncacheex = 0|1|2|3\n```\n\n**Example:**\n```ini\ncacheex = 2\n```\n\n**Default:**\n```ini\ncacheex = 0\n```\n\n#### cacheex modes\n\n#### cacheex = 1 - cachepull\n\n**Situation:**\n- OSCam A reader1 has `cacheex = 1`\n- OSCam B account1 has `cacheex = 1`\n\nOSCam A gets an ECM request, reader1 sends this request to OSCam B.\n\nOSCam B checks his cache:\n- Not found in cache: return NOK\n- Found in cache: return OK+CW\n- Not found in cache, but found pending request: wait `cacheexwaittime` in `oscam.conf [global]` and check again. OSCam B never requests new EMMs.\n\n**CW-flow:** B → A\n\n#### cacheex = 2 - cachepush\n\n**Situation:**\n- OSCam A reader1 has `cacheex = 2`\n- OSCam B account1 has `cacheex = 2`\n\nIf OSCam B gets a CW, it's pushed to OSCam A. Reader has normal functionality and can request ECMs.\n\n- Problem: OSCam can only push CWs if OSCam A is connected\n- Problem or feature?: OSCam A reader can request ECMs from OSCam B\n\n**CW-flow:** B → A\n\n#### cacheex = 3 - reversecachepush\n\n**Situation:**\n- OSCam A reader1 has `cacheex = 3`\n\nIf OSCam A gets a CW, it's pushed to OSCam B. OSCam A never requests new ECMs.\n\n**CW-flow:** A → B", .status = 0 },
|
||||||
|
{ .param = "cacheex_maxhop", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nDefine maximum hops for cache exchange.\n\n**Format:**\n```ini\ncacheex_maxhop = hops\n```\n\n**Example:**\n```ini\ncacheex_maxhop = 5\n```\n\n**Default:**\n```ini\ncacheex_maxhop = 10\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_maxhop_lg", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDefine a maxhop for lg-flagged CWs for push/receive, to allow a higher maxhop than for non-flagged CWs.\n\n```ini\ncacheex_maxhop_lg = 0 # Use value of cacheex_maxhop (default)\ncacheex_maxhop_lg = 1 to 10 # Set maxhop (if value is lower than cacheex_maxhop, value of cacheex_maxhop is used)\n```\n\n**Format:**\n```ini\ncacheex_maxhop_lg = 0-10\n```\n\n**Example:**\n```ini\ncacheex_maxhop_lg = 5\n```\n\n**Default:**\n```ini\ncacheex_maxhop_lg = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_ecm_filter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nCacheEx ECM filter for this reader. Defines which CAIDs/providers/services are allowed for cache exchange.\n\n**Format:**\n```ini\ncacheex_ecm_filter = [caid][&mask][@provid][$servid],n\n```\n\n**Example:**\n```ini\ncacheex_ecm_filter = 1234@000001,1234@000002\n```\n\n**Default:**\n```ini\ncacheex_ecm_filter =\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_allow_request", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nAllow ECM requests from this CacheEx reader.\n\n```ini\ncacheex_allow_request = 0 # ECM requests disabled (default)\ncacheex_allow_request = 1 # ECM requests allowed\n```\n\n**Format:**\n```ini\ncacheex_allow_request = 0|1\n```\n\n**Example:**\n```ini\ncacheex_allow_request = 1\n```\n\n**Default:**\n```ini\ncacheex_allow_request = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_drop_csp", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nDrop CWs received via CSP (Cardservproxy protocol) for this reader.\n\n```ini\ncacheex_drop_csp = 0 # accept CSP CWs (default)\ncacheex_drop_csp = 1 # drop CSP CWs\n```\n\n**Format:**\n```ini\ncacheex_drop_csp = 0|1\n```\n\n**Example:**\n```ini\ncacheex_drop_csp = 1\n```\n\n**Default:**\n```ini\ncacheex_drop_csp = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_allow_filter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nAllow this reader to set CacheEx ECM filters remotely.\n\n```ini\ncacheex_allow_filter = 0 # remote filter setting disabled\ncacheex_allow_filter = 1 # remote filter setting allowed (default)\n```\n\n**Format:**\n```ini\ncacheex_allow_filter = 0|1\n```\n\n**Example:**\n```ini\ncacheex_allow_filter = 0\n```\n\n**Default:**\n```ini\ncacheex_allow_filter = 1\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_allow_maxhop", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nSet maxhop settings remotely, if remote reader/user has `cacheex_allow_maxhop = 1`.\n\n```ini\ncacheex_allow_maxhop = 0 # Opt-in (default)\ncacheex_allow_maxhop = 1 # Allow\n```\n\n**Format:**\n```ini\ncacheex_allow_maxhop = 0|1\n```\n\n**Example:**\n```ini\ncacheex_allow_maxhop = 1\n```\n\n**Default:**\n```ini\ncacheex_allow_maxhop = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_block_fakecws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nBlock fake CWs for this reader.\n\n```ini\ncacheex_block_fakecws = 0 # allow all CWs (default)\ncacheex_block_fakecws = 1 # block fake CWs\n```\n\n**Format:**\n```ini\ncacheex_block_fakecws = 0|1\n```\n\n**Example:**\n```ini\ncacheex_block_fakecws = 1\n```\n\n**Default:**\n```ini\ncacheex_block_fakecws = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_cw_check_for_push", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nPush only when `cacheex_cw_check` counter reached. Localgenerated-flagged CWs are always pushed out.\n\n```ini\ncacheex_cw_check_for_push = 0 # Opt-in (default)\ncacheex_cw_check_for_push = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_cw_check_for_push = 0|1\n```\n\n**Example:**\n```ini\ncacheex_cw_check_for_push = 1\n```\n\n**Default:**\n```ini\ncacheex_cw_check_for_push = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_lg_only_remote_settings", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nPossibility to deny cacheex-receiver/client (cx2: user / cx3: reader) to overwrite the following settings at cacheex-sending-instance:\n- `cacheex_localgenerated_only`\n- `cacheex_lg_only_tab`\n\nIt makes sense if you want to force your local settings. If the user/reader isn't allowed to overwrite your values:\n- It is still possible for the cacheex-receiver to set `cacheex_localgenerated_only=1`, if the user/reader defines `cacheex_localgenerated_only_in=1`; but it is only at cacheex-sending-instance possible to disable it\n- It is still possible for the cacheex-receiver to add `cacheex_lg_only_tab`, if the user/reader defines `cacheex_lg_only_in_tab=1234,1337`; but it is only merged to the sender-instance `cacheex_lg_only_tab` values\n\nIf `cacheex_lg_only_remote_settings` in `oscam.conf` is enabled, the user/reader-settings are ignored.\n\n```ini\ncacheex_lg_only_remote_settings = 0 # Opt-out (default)\ncacheex_lg_only_remote_settings = 1 # Deny remote overwrite\n```\n\n**Format:**\n```ini\ncacheex_lg_only_remote_settings = 0|1\n```\n\n**Example:**\n```ini\ncacheex_lg_only_remote_settings = 1\n```\n\n**Default:**\n```ini\ncacheex_lg_only_remote_settings = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_localgenerated_only", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForward only CWs which are flagged as localgenerated.\n\n```ini\ncacheex_localgenerated_only = 0 # Opt-in (default)\ncacheex_localgenerated_only = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_localgenerated_only = 0|1\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only = 1\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_localgenerated_only_caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nCAID table for localgenerated-only filter. Deprecated: use cacheex_lg_only_tab instead.\n\n**Format:**\n```ini\ncacheex_localgenerated_only_caid = CAID1[,CAID2]...\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only_caid = 0100,0500,1702\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only_caid =\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_lg_only_tab", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nForward only CWs which are lg-flagged for this list of caid/provid(s).\n\nIf provid FFFFFE is set, all provids for this caid are valid!\n\n**Syntax:**\n```ini\ncacheex_lg_only_tab = caid1:provid1[,provid2];caid2:provid1;\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_lg_only_in_aio_only", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nUse drop lg-only settings (`cacheex_localgenerated_only_in` & `cacheex_lg_only_in_tab`) only if peer is detected as cx-aio-patched or svn >= 11588.\n\n```ini\ncacheex_lg_only_in_aio_only = 0 # Opt-in (default)\ncacheex_lg_only_in_aio_only = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_lg_only_in_aio_only = 0|1\n```\n\n**Example:**\n```ini\ncacheex_lg_only_in_aio_only = 1\n```\n\n**Default:**\n```ini\ncacheex_lg_only_in_aio_only = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_localgenerated_only_in", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDrop incoming CWs which are NOT flagged as localgenerated.\n\n```ini\ncacheex_localgenerated_only_in = 0 # Opt-in (default)\ncacheex_localgenerated_only_in = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_localgenerated_only_in = 0|1\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only_in = 1\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only_in = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_localgenerated_only_in_caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nCAID table for incoming localgenerated-only filter. Deprecated: use cacheex_lg_only_in_tab instead.\n\n**Format:**\n```ini\ncacheex_localgenerated_only_in_caid = CAID1[,CAID2]...\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only_in_caid = 0100,0500,1702\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only_in_caid =\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_lg_only_in_tab", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nAllow incoming CWs only if they are lg-flagged for this list of caid/provid(s).\n\nIf provid FFFFFE is set, all provids for this caid are valid!\n\n**Syntax:**\n```ini\ncacheex_lg_only_in_tab = caid1:provid1[,provid2];caid2:provid1;\n```", .status = 0 },
|
||||||
|
{ .param = "cacheex_nopushafter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDon't forward CWs from local/proxy-reader via CacheEx, if the defined time_in_ms for the CAID is reached.\n\n**Syntax:**\n```ini\ncacheex_nopushafter = CAID:time_in_ms[,n]\n```", .status = 0 },
|
||||||
|
{ .param = "caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine and mapping of CAIDs for reader.\n\n**Syntax:**\n```ini\ncaid = <CAID>[&<mask>][:<target CAID>][,<CAID>[&<mask>][:<target CAID>]]...\n```\n\n**Examples:**\n```ini\ncaid = 0100\ncaid = 0200&ffee:0300\ncaid = 0400&ff00:0500,0600\ncaid = 0702,0722\ncaid = 0702&ffdf # Shortcut for the example above\n```\n\n**Default:** All CAIDs with mask FFFF", .status = 0 },
|
||||||
|
{ .param = "atr", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet a custom ATR (Answer To Reset) for the reader. Override the automatic ATR detection.\n\n**Format:**\n```ini\natr = hex_bytes\n```\n\n**Example:**\n```ini\natr = 3B9F21E49067534C000000280F28000069FF6500\n```\n\n**Default:**\n```ini\natr =\n```", .status = 0 },
|
||||||
|
{ .param = "boxid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNDS receiver box ID.\n\n**Example:**\n```ini\nboxid = 12345678\n```\n\n**Default:**\n```ini\nboxid =\n```", .status = 0 },
|
||||||
|
{ .param = "boxkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBox key for Nagravision SCs / CAM key for Irdeto SCs / sessionkey for Seca SCs / CamID for Viaccess.\n\n**Default:**\n```ini\nboxkey =\n```", .status = 0 },
|
||||||
|
{ .param = "rsakey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRSA key for Nagravision/Tiger SCs / CAM key data for Irdeto SCs, Conax SCs.\n\n**Default:**\n```ini\nrsakey =\n```", .status = 0 },
|
||||||
|
{ .param = "cwpkkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCWPK (Control Word Protection Key) for Nagra readers.\n\n**Format:**\n```ini\ncwpkkey = index:hex_bytes\n```\n\n**Example:**\n```ini\ncwpkkey = 0:0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwpkkey =\n```", .status = 0 },
|
||||||
|
{ .param = "deskey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDES key for the reader in hexadecimal format.\n\n**Format:**\n```ini\ndeskey = hex_bytes\n```\n\n**Example:**\n```ini\ndeskey = 0102030405060708090A0B0C0D0E\n```\n\n**Default:**\n```ini\ndeskey =\n```", .status = 0 },
|
||||||
|
{ .param = "cak7_mode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nInitialize card in CAK7 (Merlin) mode for Nagravision readers.\n\n```ini\ncak7_mode = 0 # standard mode (default)\ncak7_mode = 1 # CAK7/Merlin mode\n```\n\n**Format:**\n```ini\ncak7_mode = 0|1\n```\n\n**Example:**\n```ini\ncak7_mode = 1\n```\n\n**Default:**\n```ini\ncak7_mode = 0\n```", .status = 0 },
|
||||||
|
{ .param = "card_startdate_basemonth", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase month for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_basemonth = month\n```\n\n**Example:**\n```ini\ncard_startdate_basemonth = 1\n```\n\n**Default:**\n```ini\ncard_startdate_basemonth = 1\n```", .status = 0 },
|
||||||
|
{ .param = "card_startdate_baseyear", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase year for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_baseyear = year\n```\n\n**Example:**\n```ini\ncard_startdate_baseyear = 1997\n```\n\n**Default:**\n```ini\ncard_startdate_baseyear = 1997\n```", .status = 0 },
|
||||||
|
{ .param = "card_expiredate_basemonth", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase month for card expiration date calculation.\n\n**Format:**\n```ini\ncard_expiredate_basemonth = month\n```\n\n**Example:**\n```ini\ncard_expiredate_basemonth = 1\n```\n\n**Default:**\n```ini\ncard_expiredate_basemonth = 1\n```", .status = 0 },
|
||||||
|
{ .param = "card_expiredate_baseyear", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase year for card expiration date calculation.\n\n**Format:**\n```ini\ncard_expiredate_baseyear = year\n```\n\n**Example:**\n```ini\ncard_expiredate_baseyear = 1997\n```\n\n**Default:**\n```ini\ncard_expiredate_baseyear = 1997\n```", .status = 0 },
|
||||||
|
{ .param = "ins7e", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAdd 26 hex-bytes payload for **NDS Videoguard 2 SCs**.\n\n```ini\nins7e = payload # 26 hex bytes\n = # None (default)\n```\n\n⚠️ **Attention:** Valid for physical readers only", .status = 0 },
|
||||||
|
{ .param = "ins42", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nINS42 command data for Irdeto readers.\n\n**Format:**\n```ini\nins42 = hex_bytes\n```\n\n**Example:**\n```ini\nins42 = 0102030405\n```\n\n**Default:**\n```ini\nins42 =\n```", .status = 0 },
|
||||||
|
{ .param = "ins7e11", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAdd TA1 Byte for **NDS Videoguard 2 SCs**.\n\n```ini\nins7e11 = # None (default)\n = 11 # 0001 FI + 0001 DI (1 x)\n = 13 # 0001 FI + 0011 DI (4 x)\n = 14 # 0001 FI + 0100 DI (8 x)\n = 15 # 0001 FI + 0101 DI (16 x)\n```\n\n⚠️ **Attention:** Valid for physical readers only", .status = 0 },
|
||||||
|
{ .param = "ins2e06", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAdd check control for pin payload (4 hex bytes) for **NDS Videoguard 2 SCs**.\n\n```ini\nins2e06 = Payload # 4 hex bytes\n = # None (blank, default)\n```\n\n⚠️ **Attention:** Valid for physical readers only", .status = 0 },
|
||||||
|
{ .param = "k1_generic", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nGeneric K1 key for DRE/Bulcrypt readers. DES or 3DES key in hexadecimal.\n\n**Format:**\n```ini\nk1_generic = hex_bytes\n```\n\n**Example:**\n```ini\nk1_generic = 0102030405060708\n```\n\n**Default:**\n```ini\nk1_generic =\n```", .status = 0 },
|
||||||
|
{ .param = "k1_unique", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUnique K1 key for DRE/Bulcrypt readers. DES or 3DES key in hexadecimal.\n\n**Format:**\n```ini\nk1_unique = hex_bytes\n```\n\n**Example:**\n```ini\nk1_unique = 0102030405060708\n```\n\n**Default:**\n```ini\nk1_unique =\n```", .status = 0 },
|
||||||
|
{ .param = "fix07", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable 0x07 fix for **NDS Videoguard 2 SCs**.\n\n```ini\nfix07 = 0 # Disabled\nfix07 = 1 # Enabled (default)\n```\n\n⚠️ **Attention:** Valid for physical readers only\n\n**Format:**\n```ini\nfix07 = 0|1\n```\n\n**Example:**\n```ini\nfix07 = 0\n```\n\n**Default:**\n```ini\nfix07 = 1\n```", .status = 0 },
|
||||||
|
{ .param = "fix9993", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable fix for 9993 error with CAID 0919 SCs.\n\n```ini\nfix9993 = 0 # Disabled (default)\nfix9993 = 1 # Enabled\n```\n\n**Format:**\n```ini\nfix9993 = 0|1\n```\n\n**Example:**\n```ini\nfix9993 = 1\n```\n\n**Default:**\n```ini\nfix9993 = 0\n```", .status = 0 },
|
||||||
|
{ .param = "readtiers", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMethod to get tiers of **NDS Videoguard SCs**.\n\n```ini\nreadtiers = 0 # Disabled (default)\nreadtiers = 1 # ins70 (new) method\nreadtiers = 2 # ins76 (old) method\n```\n\n**Format:**\n```ini\nreadtiers = 0|1|2\n```\n\n**Example:**\n```ini\nreadtiers = 1\n```\n\n**Default:**\n```ini\nreadtiers = 0\n```", .status = 0 },
|
||||||
|
{ .param = "force_irdeto", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForce Irdeto SC mode even if RSA key is set for Irdeto tunneled Nagravision SC.\n\n```ini\nforce_irdeto = 0 # No (default)\nforce_irdeto = 1 # Yes\n```\n\n**Format:**\n```ini\nforce_irdeto = 0|1\n```\n\n**Example:**\n```ini\nforce_irdeto = 1\n```\n\n**Default:**\n```ini\nforce_irdeto = 0\n```", .status = 0 },
|
||||||
|
{ .param = "ecmnotfoundlimit", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of ECMs with \"not found\" answer until the reader will be restarted.\n\n```ini\necmnotfoundlimit = count\n = 0 # No limit (default)\n```\n\n**Default:**\n```ini\necmnotfoundlimit = 0\n```", .status = 0 },
|
||||||
|
{ .param = "ecmwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine valid ECM length **in hex** and provid for physical reader.\n\n**Syntax:**\n```ini\necmwhitelist = [CAID[@provid]:]length[,length]...[;[CAID[@provid]:]length[,length]...]...\n```\n\n**Examples:**\n```ini\necmwhitelist = 10,20,30,0a,0b,0c\necmwhitelist = 0100:10,20;0200@12345:0a,4b\n = # None (default) and provid 000000\n```\n\n⚠️ **In normal operation mode this parameter is not required!**\n\n📋 **[List of ECM lengths](http://www.streamboard.tv/oscam/wiki/ECMLengthList)**", .status = 0 },
|
||||||
|
{ .param = "ecmheaderwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet valid ECM header per CAID and provid **in hex**.\n\n**Syntax:**\n```ini\necmheaderwhitelist = [CAID[@provid]:]header[,header]...[;[@provid]:]header[,header]...]...\n```\n\n**Default:** None, provid = 000000\n\n📋 **[HeaderWhitelist](http://www.streamboard.tv/oscam/wiki/HeaderWhitelist)**", .status = 0 },
|
||||||
|
{ .param = "detect", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nCard status (inserted or removed) is detected via a serial device (UART/SCI) handshake input line.\n\n**Values:**\n```ini\ndetect = cd (default) # Carrier Detect\n = cts # Clear To Send\n = dsr # Data Set Ready\n = ring # Ring Indicator\n = none # No detection line connected, card always detected as inside\n```\n\n- `none` means: no detection line connected to the card reader. The card is always detected as being inside cardreader.\n- Inverse detect signal: prefix \"!\" (e.g., `detect = !cts`)\n\n**If `use_gpio = 1` is set:**\n```ini\ndetect = gpio1...gpio7 # Card status detected via a GPIO\n```\n\nGPIO means \"general purpose input output\".\n\n**Example:**\n```ini\n[reader]\nlabel = mymouse\ndescription = mymouse xxx\nprotocol = mouse\ndevice = /dev/ttyUSB0\nservices = xxx\nboxkey = 1122334455667788\nforce_irdeto = 1\ndetect = cd\nmhz = 1000\ncardmhz = 600\ngroup = 1,2,3\nemmcache = 1,3,2\n```", .status = 0 },
|
||||||
|
{ .param = "nagra_read", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRead **Nagravision** records (on NCMED cards only).\n\n```ini\nnagra_read = 0 # Disabled (default)\nnagra_read = 1 # Read all records with expired rights\nnagra_read = 2 # Read records with valid rights only\n```\n\n**Format:**\n```ini\nnagra_read = 0|1|2\n```\n\n**Example:**\n```ini\nnagra_read = 2\n```\n\n**Default:**\n```ini\nnagra_read = 0\n```", .status = 0 },
|
||||||
|
{ .param = "detect_seca_nagra_tunneled_card", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDetect Seca cards tunneled through Nagra for hybrid cards.\n\n```ini\ndetect_seca_nagra_tunneled_card = 0 # detection disabled\ndetect_seca_nagra_tunneled_card = 1 # detection enabled (default)\n```\n\n**Format:**\n```ini\ndetect_seca_nagra_tunneled_card = 0|1\n```\n\n**Example:**\n```ini\ndetect_seca_nagra_tunneled_card = 0\n```\n\n**Default:**\n```ini\ndetect_seca_nagra_tunneled_card = 1\n```", .status = 0 },
|
||||||
|
{ .param = "mhz", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet reader frequency in units of 10 kHz. If mhz > cardmhz you are in overclocking mode.\n\n**Example:**\n```ini\ncardmhz = 600 # (6000 KHz = 6 MHz)\nmhz = 1000 # (10000 KHz = 10 MHz)\n```\n\n**Default:** 357\n\nAuto clock speed in **Dreambox mode**: set to -1.\n\n📋 **[List of default and overclocking card frequencies](http://www.streamboard.tv/oscam/wiki/CardsList)**", .status = 0 },
|
||||||
|
{ .param = "cardmhz", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nSet standard SC frequency in units of 10 kHz. For Irdeto SC set to 600.\n\n**Examples:**\n```ini\ncardmhz = 600 # Irdeto card\n = 357 # Default (blank)\n```\n\n**INTERNAL READERS**\n\nIf you use `cardmhz > 2000` OSCam will switch to PLL clocking. Internal readers of boxes from Dream Multimedia GmbH can be clocked more precise with it.\n\nThe used cardmhz should reflect the highest frequency of the PLL crystal in the internal cardreader. OSCam will calculate the best PLL divider that comes nearest to the wanted user card speed specified in cardmhz.\n\n**Recommended settings:**\n- Models with PPC-CPU (DM500/DM600/DM7000/DM7020): `cardmhz = 3150`\n- Models with MIPS-CPU (DM500HD/DM800/DM800SE/DM8k/DM7020HD etc.): `cardmhz = 2700`\n- DM7025 (special): `cardmhz = 8300`\n\n⚠️ **If only the parameter cardmhz is set (without mhz = xxx) then OSCam clocks the card automatically with the ATR!**\n\n**Example:**\nYou have a DM800 HD PVR (MIPS), so you should set cardmhz to 2700. If you have a Nagra card that should run on 5 MHz:\n- Normal clocking: `cardmhz = 2700` and `mhz = 500`\n- Overclocking: `cardmhz = 2700` and `mhz = 900` (card will run at 9 MHz)\n\n⚠️ Keep in mind that most internal readers of non-dreamboxes clock the cards automatically and completely ignore any user clockspeed setting. But you should set cardmhz and mhz anyway, as it's still used to calculate the correct timings in OSCam.\n\n📋 **[List of default and overclocking card frequencies](http://www.streamboard.tv/oscam/wiki/CardsList)**", .status = 0 },
|
||||||
|
{ .param = "mode", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nSet card init mode for **AzBox** reader.\n\n```ini\nmode = 1 # AzBox-Reader\n = 0 # None (default)\n```\n\n**Default:**\n```ini\nmode = 0\n```", .status = 0 },
|
||||||
|
{ .param = "ident", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n⚠️ **Attention:** If in `oscam.conf [global]` loadbalancing is enabled among `lb_mode`, then there may be **no entries**!\n\n⚠️ **Note:** This parameter is only used for EMM and not for ECM. You cannot force ECM to be sent to the card using this parameter.\n\nDefine CAID and ident **SC specific** for reader.\n\n**Syntax:**\n```ini\nident = <CAID>:<ident>[,ident]...[;<CAID>:<ident>[,ident]...]...\n```\n\n**Example:**\n```ini\nident = 0100:123456,234567;0200:345678,456789\n = # Blank, no definition (default)\n```", .status = 0 },
|
||||||
|
{ .param = "chid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine **Irdeto ChID** for reader.\n\n**Examples:**\n```ini\nchid = 0100:12\nchid = 0100:12;0604:0000BA,000101,00010E,000141\n = # Blank (default)\n```", .status = 0 },
|
||||||
|
{ .param = "class", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine class **in hex** SC specific for reader.\n\n**Example:**\n```ini\nclass = 01,02,!1b,!2b # 01 and 02 yes, 1b and 2b no\n = # Blank, no definition (default)\n```", .status = 0 },
|
||||||
|
{ .param = "aeskeys", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMultiple 16 bytes AES keys for Viaccess SCs (the used postprocessing AES key is specified through the D2 nano of the ECM).\n\n**Syntax:**\n```\nCAID@ident:AES key #0 CAID #0[,AES key #1 CAID #0],...[;CAID #1@ident:AES key #0 CAID #1[,AES key #1 CAID #1],...]...\n```\n\n**Special AES keys:**\n- `00` = do not return any CW, no AES key specified\n- `FF` = return CW received from the SC, no AES key specified\n\n**Examples:**\n```ini\naeskeys = 0500@012345:000102030405060708090a0b0c0d0e0f;0500@543210:0,0,0f0e0d0c0b0a090807060504030201\naeskeys = 0500@012345:key0,key1,key2,key3,key4,key5,...;0500@543210:key0,key1,key2,key3,key4,key5,...\n```\n\nIf keys are unknown, replace them with 0:\n```ini\naeskeys = 0500@012345:key0,key1,0,0,key4,key5,...\n```", .status = 0 },
|
||||||
|
{ .param = "group", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nReader assignment to group. Each reader must be listed in one or more groups. This will determine which client has access to what reader.\n\nValid values: 1-64\n\n**Syntax:**\n```ini\ngroup = 1...64[,1...64]...\n```\n\n**Examples:**\n```ini\ngroup = 1 # One group\ngroup = 1,4,5 # Multiple groups\n```\n\n⚠️ **Setting required parameter blank is not allowed!**", .status = 0 },
|
||||||
|
{ .param = "emmcache", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet EMM cache of local reader.\n\n⚠️ **Attention:** Without this parameter, no EMMs are shown in the log!\n\n**Format:**\n```ini\nemmcache = <usecache>,<rewrite>,<logging>,<stb-emm>\n```\n\n**Parameters:**\n\n**`<usecache>`:**\n- `0` = Disable usage of emmcache and emmstats (default)\n- `1` = Enable emmcache, emmstats and save to file if OSCam is stopped\n- `2` = Enable emmcache, emmstats but don't save to file if OSCam is stopped\n\n**`<rewrite>`:**\n- `n` = Determines how often one and the same EMM is written (only if `<usecache>` = 1 or 2)\n\n**`<logging>`:**\n- `0` = EMM logging disabled\n- `1` = Logging EMM errors\n- `2` = Logging written EMMs\n- `4` = Logging skipped EMMs\n- `8` = Logging blocked EMMs\n- `16` = Logging audisabled EMMs\n\nSummarizing these values is possible. 31 shows all kinds of messages.\n\n**`<stb-emm>`:**\n- `0` = EMM for STB are ignored (default)\n- `1` = EMM for STB are sent to the reader (very specific usage)\n\n**Examples:**\n```ini\nemmcache = 1,3,10,0 # Cache on, write 3x, log written (2) and blocked (8) = 10, don't send stb-emm\nemmcache = 1,2,6,1 # Cache on, write 2x, log written (2) and skipped (4) = 6, send stb-emm\n```\n\n**Note:** **stb-emm** is only handy for specific usage (Viaccess: see commit [#10584](http://www.streamboard.tv/oscam/changeset/10584)). In Viaccess we saw some EMM-G that are for the STB and not for the card. Those EMMs are used, for example, to define overencryption key (AES) into the STB to encrypt STB-Card dialog.", .status = 0 },
|
||||||
|
{ .param = "blockemm-unknown", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock unknown types of EMMs.\n\n```ini\nblockemm-unknown = 0 # No block (default)\nblockemm-unknown = 1 # Block all unknown kinds of EMMs\n```\n\n**Format:**\n```ini\nblockemm-unknown = 0|1\n```\n\n**Example:**\n```ini\nblockemm-unknown = 1\n```\n\n**Default:**\n```ini\nblockemm-unknown = 0\n```", .status = 0 },
|
||||||
|
{ .param = "blockemm-u", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock unique EMMs.\n\n```ini\nblockemm-u = 0 # No block (default)\nblockemm-u = 1 # Block EMMs, which are addressed to card immediately\n```\n\n**Format:**\n```ini\nblockemm-u = 0|1\n```\n\n**Example:**\n```ini\nblockemm-u = 1\n```\n\n**Default:**\n```ini\nblockemm-u = 0\n```", .status = 0 },
|
||||||
|
{ .param = "blockemm-s", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock shared EMMs.\n\n```ini\nblockemm-s = 0 # No block (default)\nblockemm-s = 1 # Block EMMs, which are addressed to certain groups of cards\n```\n\n**Format:**\n```ini\nblockemm-s = 0|1\n```\n\n**Example:**\n```ini\nblockemm-s = 1\n```\n\n**Default:**\n```ini\nblockemm-s = 0\n```", .status = 0 },
|
||||||
|
{ .param = "blockemm-g", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock global EMMs.\n\n```ini\nblockemm-g = 0 # No block (default)\nblockemm-g = 1 # Block EMMs, which are addressed to all cards\n```\n\n**Format:**\n```ini\nblockemm-g = 0|1\n```\n\n**Example:**\n```ini\nblockemm-g = 1\n```\n\n**Default:**\n```ini\nblockemm-g = 0\n```", .status = 0 },
|
||||||
|
{ .param = "saveemm-unknown", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave unknown EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-unknown = 0 # Disabled (default)\nsaveemm-unknown = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-unknown = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-unknown = 1\n```\n\n**Default:**\n```ini\nsaveemm-unknown = 0\n```", .status = 0 },
|
||||||
|
{ .param = "saveemm-u", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave unique EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-u = 0 # Disabled (default)\nsaveemm-u = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-u = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-u = 1\n```\n\n**Default:**\n```ini\nsaveemm-u = 0\n```", .status = 0 },
|
||||||
|
{ .param = "saveemm-s", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave shared EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-s = 0 # Disabled (default)\nsaveemm-s = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-s = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-s = 1\n```\n\n**Default:**\n```ini\nsaveemm-s = 0\n```", .status = 0 },
|
||||||
|
{ .param = "saveemm-g", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave global EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-g = 0 # Disabled (default)\nsaveemm-g = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-g = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-g = 1\n```\n\n**Default:**\n```ini\nsaveemm-g = 0\n```", .status = 0 },
|
||||||
|
{ .param = "blockemm-bylen", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock all types of EMMs by length. Maximum 10 values.\n\n**Syntax:**\n```ini\nblockemm-bylen = [length range,length range]... (decimal)\n```\n\n**Example:**\n```ini\nblockemm-bylen = 1-10,11-\n```\n\n**Default:**\n```ini\nblockemm-bylen =\n```", .status = 0 },
|
||||||
|
{ .param = "lb_weight", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nThe higher the value, the higher the probability for reader selection. It's a divider for the average response time.\n\n**Format:**\n```ini\nlb_weight = weight\n```\n\n**Example:**\n```ini\nlb_weight = 200\n```\n\n**Default:**\n```ini\nlb_weight = 100\n```", .status = 0 },
|
||||||
|
{ .param = "lb_force_fallback", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet the reader always as fallback for load balancing without considering the reader's statistics.\n\n```ini\nlb_force_fallback = 0 # Default\nlb_force_fallback = 1 # Set reader always as fallback\n```\n\n**Format:**\n```ini\nlb_force_fallback = 0|1\n```\n\n**Example:**\n```ini\nlb_force_fallback = 1\n```\n\n**Default:**\n```ini\nlb_force_fallback = 0\n```", .status = 0 },
|
||||||
|
{ .param = "savenano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nList of EMM-nanos (in hex w/o 0x) to save or all EMM-nanos. Only valid for physical readers. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n**Syntax:**\n```ini\nsavenano = nano[,nano]...|all\n```\n\n**Examples:**\n```ini\nsavenano = 45,93,7a,ff\n = all\n = # Blank (default)\n```", .status = 0 },
|
||||||
|
{ .param = "blocknano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nList of EMM-nanos to block (in hex w/o 0x) or all EMM-nanos. Only valid for physical readers!\n\n**Examples:**\n```ini\nblocknano = 45,93,7a,ff\n = all\n = # Blank (default)\n```", .status = 0 },
|
||||||
|
{ .param = "dropbadcws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReject bad CWs, send \"not found\" instead of bad CWs.\n\n```ini\ndropbadcws = 0 # Default\ndropbadcws = 1 # Reject bad CWs\n```\n\n**Format:**\n```ini\ndropbadcws = 0|1\n```\n\n**Example:**\n```ini\ndropbadcws = 1\n```\n\n**Default:**\n```ini\ndropbadcws = 0\n```", .status = 0 },
|
||||||
|
{ .param = "disablecrccws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDisable CW checksum test.\n\n```ini\ndisablecrccws = 0 # Enable (default)\ndisablecrccws = 1 # Disable CW checksum test\n```\n\n**Format:**\n```ini\ndisablecrccws = 0|1\n```\n\n**Example:**\n```ini\ndisablecrccws = 1\n```\n\n**Default:**\n```ini\ndisablecrccws = 0\n```", .status = 0 },
|
||||||
|
{ .param = "use_gpio", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nUse GPIO as card detect/reset.\n\n```ini\nuse_gpio = 0 # Off (default)\nuse_gpio = 1 # On\n```\n\n**Format:**\n```ini\nuse_gpio = 0|1\n```\n\n**Example:**\n```ini\nuse_gpio = 1\n```\n\n**Default:**\n```ini\nuse_gpio = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cccversion", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\n**Only for CCcam**\n\nDefine CCcam version.\n\n**Syntax:**\n```ini\ncccversion = <mainversion>,<version>,<sub version>\n```\n\n**Example:**\n```ini\ncccversion = 1.2.34\n```", .status = 0 },
|
||||||
|
{ .param = "cccmaxhops", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nDefine CCcam maximum SC distance hops.\n\n```ini\ncccmaxhops = 0 # Local SCs only\n = 1 # Local SCs + 1 hop\n = 2 # Local SCs + 2 hops\n = ... # And so on\n = 10 # Default\n```\n\n**Default:**\n```ini\ncccmaxhops = 10\n```", .status = 0 },
|
||||||
|
{ .param = "cccmindown", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nFilters all readers with hops smaller than number.\n\n```ini\ncccmindown = number\n = 0 # Default\n```\n\n**Default:**\n```ini\ncccmindown = 0\n```", .status = 0 },
|
||||||
|
{ .param = "ccckeepalive", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nSend keepalive messages to keep connection to remote CCCam server up.\n\n```ini\nccckeepalive = 0 # No (default)\nccckeepalive = 1 # Yes\n```\n\n**Format:**\n```ini\nccckeepalive = 0|1\n```\n\n**Example:**\n```ini\nccckeepalive = 1\n```\n\n**Default:**\n```ini\nccckeepalive = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cccam_reshare", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReshare level of CCC proxy cards to be sent into gbox network.\n\n```ini\ncccam_reshare = -1 # No resharing (default)\n = 0 # Reshare for direct peer only\n = 1 # Reshare for direct peer plus next level\n = x # Resharing for direct peer plus x share level\n```\n\n**Default:**\n```ini\ncccam_reshare = -1\n```", .status = 0 },
|
||||||
|
{ .param = "cccreconnect", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReconnect again after ECM request timeout in milliseconds.\n\n```ini\ncccreconnect = timeout # Timeout in milliseconds\n = 12000 # Default\n```\n\n**Default:**\n```ini\ncccreconnect = 12000\n```", .status = 0 },
|
||||||
|
{ .param = "ccchop", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nSet hop for **non** CCCam readers.\n\n```ini\nccchop = hop\n = 0 # Default\n```\n\n**Default:**\n```ini\nccchop = 0\n```", .status = 0 },
|
||||||
|
{ .param = "resetalways", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAlways reset the card before each ECM request.\n\n```ini\nresetalways = 0 # normal operation (default)\nresetalways = 1 # always reset card\n```\n\n**Format:**\n```ini\nresetalways = 0|1\n```\n\n**Example:**\n```ini\nresetalways = 1\n```\n\n**Default:**\n```ini\nresetalways = 0\n```", .status = 0 },
|
||||||
|
{ .param = "deprecated", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nFirst the SC will be initialized in normal mode. If it fails, the SC will be automatically reverted to deprecated mode, so that the SC speed will not be changed and the communication will remain on normal ATR speed of 9600 baud.\n\n```ini\ndeprecated = 0 # Normal mode (default)\ndeprecated = 1 # Use deprecated SC mode only\n```\n\n**Format:**\n```ini\ndeprecated = 0|1\n```\n\n**Example:**\n```ini\ndeprecated = 1\n```\n\n**Default:**\n```ini\ndeprecated = 0\n```", .status = 0 },
|
||||||
|
{ .param = "audisabled", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nExclude reader from auto AU (auto update).\n\n```ini\naudisabled = 0 # Not excluded (default)\naudisabled = 1 # Excluded\n```\n\n**Format:**\n```ini\naudisabled = 0|1\n```\n\n**Example:**\n```ini\naudisabled = 1\n```\n\n**Default:**\n```ini\naudisabled = 0\n```", .status = 0 },
|
||||||
|
{ .param = "auprovid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet provider ID to use the right reader for auto AU.\n\n**Example:**\n```ini\nauprovid = 123456\n```\n\n**Default:**\n```ini\nauprovid =\n```", .status = 0 },
|
||||||
|
{ .param = "ndsversion", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet NDS **Videoguard** version.\n\n```ini\nndsversion = 0 # Autodetection (default)\n = 1 # NDS Videoguard 1\n = 12 # NDS Videoguard 1+\n = 2 # NDS Videoguard 2\n```\n\n**Default:**\n```ini\nndsversion = 0\n```", .status = 0 },
|
||||||
|
{ .param = "ratelimitecm", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of different SIDs in ECMs allowed for an interval.\n\n```ini\nratelimitecm = number\n = 0 # Default\n```\n\n**Default:**\n```ini\nratelimitecm = 0\n```", .status = 0 },
|
||||||
|
{ .param = "ecmunique", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable check for matching ECM hash in ratelimit slot.\n\n```ini\necmunique = 0 # Default\necmunique = 1 # Enable check for matching ECM hash in ratelimit slot\n```\n\n⚠️ **Remark:** Parameter `ratelimitecm` must be set to be able to enable this option!\n\n**Format:**\n```ini\necmunique = 0|1\n```\n\n**Example:**\n```ini\necmunique = 1\n```\n\n**Default:**\n```ini\necmunique = 0\n```", .status = 0 },
|
||||||
|
{ .param = "ratelimittime", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nInterval for rate limit in milliseconds.\n\n```ini\nratelimittime = milliseconds\n = 0 # Default\n```\n\n**Default:**\n```ini\nratelimittime = 0\n```", .status = 0 },
|
||||||
|
{ .param = "srvidholdtime", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nTime to keep service ID in ratelimit slot. During this time checking for `ecmunique` is disabled.\n\n```ini\nsrvidholdtime = milliseconds\n = 0 # Default\n```\n\n**Default:**\n```ini\nsrvidholdtime = 0\n```", .status = 0 },
|
||||||
|
{ .param = "cooldown", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine cooldown.\n\n**Syntax:**\n```ini\ncooldown = delay,duration\n```\n\n**Parameters:**\n- `delay` = Delay in milliseconds for which the reader is allowed to do more ECM requests than defined by parameter `ratelimitecm`\n- `duration` = Duration in milliseconds the reader needs to cooldown\n\nBoth parameters are mandatory when used.\n\n⚠️ **Parameters `ratelimitecm` and `ratelimittime` are required!**\n\n**Default:**\n```ini\ncooldown =\n```", .status = 0 },
|
||||||
|
{ .param = "cooldowndelay", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCooldown delay in milliseconds. Time delay during which the reader is allowed to process more ECM requests than defined by ratelimitecm.\n\n**Format:**\n```ini\ncooldowndelay = milliseconds\n```\n\n**Example:**\n```ini\ncooldowndelay = 5000\n```\n\n**Default:**\n```ini\ncooldowndelay =\n```", .status = 0 },
|
||||||
|
{ .param = "cooldowntime", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCooldown duration in milliseconds. Time the reader needs to cool down after exceeding rate limits.\n\n**Format:**\n```ini\ncooldowntime = milliseconds\n```\n\n**Example:**\n```ini\ncooldowntime = 60000\n```\n\n**Default:**\n```ini\ncooldowntime =\n```", .status = 0 },
|
||||||
|
{ .param = "maxparallel", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMaximum number of parallel active services allowed for this reader.\n\nUseful for limiting load on readers with slot restrictions. When the limit is reached, the reader is temporarily skipped and other readers are tried. A service slot is reserved only when a reader delivers a CW (not when the request is sent). This prevents readers from blocking capacity for services they don't end up serving when multiple readers are queried simultaneously.\n\nA service slot expires when no ECM is received within the measured ECM interval plus the `paralleltimeout` buffer.\n\n```ini\nmaxparallel = 0 # unlimited (default)\nmaxparallel = 1 # only 1 active service at a time\nmaxparallel = 2 # max 2 active services\n```\n\n**Format:**\n```ini\nmaxparallel = count\n```\n\n**Example:**\n```ini\nmaxparallel = 2\n```\n\n**Default:**\n```ini\nmaxparallel = 0\n```\n\n⚠️ **After changing `maxparallel` or `parallelfactor`, OSCam must be restarted.**", .status = 0 },
|
||||||
|
{ .param = "parallelfactor", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMultiplier for pending slots used during zapping. Pending slots allow temporary capacity overrun while switching channels, preventing black screens when zapping with a single reader.\n\nWhen zapping, new services go to pending slots if active slots are full. Pending services are promoted to active when slots free up (FIFO), or dropped when active services prove they're still active by sending ECMs (FIFO).\n\nThe number of pending slots is calculated as: `round(maxparallel × parallelfactor)`\n\n```ini\nparallelfactor = 0 # disable pending slots (strict limit, may cause black screen when zapping)\nparallelfactor = 1.5 # default - with maxparallel=2: 3 pending slots\nparallelfactor = 2.0 # with maxparallel=2: 4 pending slots\n```\n\n**Pending slots by configuration:**\n\n| maxparallel | parallelfactor | Pending Slots |\n|-------------|----------------|---------------|\n| 1 | 1.5 | 2 |\n| 2 | 1.5 | 3 |\n| 4 | 1.5 | 6 |\n| 1 | 0 | 0 (disabled) |\n\n**Format:**\n```ini\nparallelfactor = factor\n```\n\n**Example:**\n```ini\nparallelfactor = 1.5\n```\n\n**Default:**\n```ini\nparallelfactor = 1.5\n```\n\n⚠️ **After changing `maxparallel` or `parallelfactor`, OSCam must be restarted.**", .status = 0 },
|
||||||
|
{ .param = "paralleltimeout", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nTimeout buffer in milliseconds added to the measured ECM interval to determine when a service slot expires.\n\nThe ECM interval is measured automatically per service. A service slot expires when no ECM is received within (measured_interval + paralleltimeout). If no interval has been measured yet, a default timeout of 10000 ms plus paralleltimeout is used.\n\n```ini\nparalleltimeout = 1000 # default\nparalleltimeout = 1500 # 1.5 seconds buffer\n```\n\n**Format:**\n```ini\nparalleltimeout = milliseconds\n```\n\n**Example:**\n```ini\nparalleltimeout = 1500\n```\n\n**Default:**\n```ini\nparalleltimeout = 1000\n```", .status = 0 },
|
||||||
|
{ .param = "read_old_classes", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRead old classes from Viaccess cards.\n\n```ini\nread_old_classes = 0 # read only current classes\nread_old_classes = 1 # read old classes too (default)\n```\n\n**Format:**\n```ini\nread_old_classes = 0|1\n```\n\n**Example:**\n```ini\nread_old_classes = 0\n```\n\n**Default:**\n```ini\nread_old_classes = 1\n```", .status = 0 },
|
||||||
|
{ .param = "P", .config = "dvbapi", .section = "", .text = "```\nP: [CAID]:[provider ID]:[service ID]:[ECM PID]:[CHID] [continue]\n```\nSets priority for specific CAIDs or providers. The optional `continue` parameter (value: 1) forces continuous retry attempts on the specified CAID, useful for Pay-Per-View services or card activation scenarios.", .status = 0 },
|
||||||
|
{ .param = "I", .config = "dvbapi", .section = "", .text = "```\nI: [CAID]:[provider ID]:[service ID]:[ECM PID]:[CHID]\n```\nIgnores specific encryption providers or Pay TV providers to prevent unnecessary ECM requests.", .status = 0 },
|
||||||
|
{ .param = "M", .config = "dvbapi", .section = "", .text = "```\nM: [CAID]:[provider ID]:[service ID]:[ECM PID] [target CAID]:[target provider ID]\n```\nMaps one CAID/provider to another, useful for redirecting requests (e.g., mapping Sky HD channels for S02 or D02 cards).", .status = 0 },
|
||||||
|
{ .param = "D", .config = "dvbapi", .section = "", .text = "```\nD: [CAID]:[provider ID]:[service ID]:[ECM PID] delay\n```\nAdds a delay in milliseconds before writing the control word, useful when the server responds too quickly.", .status = 0 },
|
||||||
|
{ .param = "L", .config = "dvbapi", .section = "", .text = "```\nL: [CAID]:[provider ID]:[service ID]:[ECM PID] ECM length (hexa)\n```\nFilters ECM requests to only allow specific ECM lengths (in hexadecimal), useful for filtering broken mappings.", .status = 0 },
|
||||||
|
{ .param = "X", .config = "dvbapi", .section = "", .text = "```\nX: [CAID]:[provider ID]:[service ID]:[ECM PID] demux\n```\nAdds decoding on an extra demux index on the same CA device (not supported on all set-top boxes).", .status = 0 },
|
||||||
|
{ .param = "J", .config = "dvbapi", .section = "", .text = "```\nJ: [CAID]:[provider ID]:[service ID]:[ECM PID] join\n```\nJoins a CAID/provider/ECM PID to another ECM PID.", .status = 0 },
|
||||||
|
{ .param = "A", .config = "dvbapi", .section = "", .text = "```\nA: ::[service ID]:[video PID]:[provider ID]::[ECM PID]\n```\nSets a dummy ECM request with CAID FFFF for services with constant control words (for STBs without PMT PID support only).", .status = 0 },
|
||||||
|
{ .param = "S", .config = "dvbapi", .section = "", .text = "```\nS: [device] [PMT file name]\n```\nSettings for DVB API device name and PMT file name (only valid for STAPI).", .status = 0 },
|
||||||
|
{ .param = "Priority", .config = "dvbapi", .section = "", .text = "```\nP: 0100:123456 # Prioritize CAID 0100 with provider 123456\nP: 0100 1 # Prioritize CAID 0100 with continuous retry (for PPV/card activation)\nP: : 1 # Client continues requesting after 3 failed attempts (all CAIDs)\nP: :1234 # Prioritize ECM with provider ID 1234 on all services\nP: 0200 # Prioritize CAID 0200\nP: 0300::9ABC # Prioritize CAID 0300 only on service 9ABC\nP: 1702 # Prioritize Sky S02\nP: 1830 # Prioritize HD+ HD01\nP: 0D95 # Prioritize ORF-ICE\n```", .status = 0 },
|
||||||
|
{ .param = "Ignore", .config = "dvbapi", .section = "", .text = "```\nI: :654321 # Ignore provider ID 654321 for all services\nI: 0 # Ignore all CAIDs not previously specified in this file\nI: 09C4 # Ignore Sky V13\n```", .status = 0 },
|
||||||
|
{ .param = "Mapping", .config = "dvbapi", .section = "", .text = "```\nM: 0400 0500:123456 # Map CAID 0400 to CAID 0500 with provider ID 123456\nM: 1834:000000:007E 1722 # Map CAID 1834 with provider 000000 and SID 007E to CAID 1722\n```", .status = 0 },
|
||||||
|
{ .param = "Delay", .config = "dvbapi", .section = "", .text = "```\nD: 0600 200 # Wait 200 ms before writing CW for CAID 0600\n```", .status = 0 },
|
||||||
|
{ .param = "ECM", .config = "dvbapi", .section = "", .text = "```\nL: 0700 8e # Only allow ECM length 8e (hex) for this CAID to filter broken mappings\n```", .status = 0 },
|
||||||
|
{ .param = "Multicrypt", .config = "dvbapi", .section = "", .text = "For channels with multiple encryption systems (e.g., Sky Germany with both Nagravision and NDS), prioritize the CAID matching your available cards to avoid unnecessary requests and speed up channel opening.", .status = 0 },
|
||||||
|
{ .param = "Pay-Per-View", .config = "dvbapi", .section = "", .text = "Use the `continue` parameter to keep retrying on a specific CAID until the card is activated:\n```\nP: 0100 1\n```", .status = 0 },
|
||||||
|
{ .param = "Server", .config = "dvbapi", .section = "", .text = "Ignore CAIDs for which you have no cards to prevent unnecessary server requests:\n```\nI: 09C4 # Ignore if you don't have V13 cards\n```", .status = 0 },
|
||||||
{ .param = "Parameters", .config = "srvid2", .section = "", .text = "- **service ID**: Service ID (channel ID) in hexadecimal\n- **CAID**: One or more CAIDs in hexadecimal\n- **@PROVID**: Optional provider ID(s) in hexadecimal\n- **channel_name**: Channel name (optional)\n- **type**: Channel type like TV, Radio, etc. (optional)\n- **description**: Additional description (optional)\n- **provider**: Provider or satellite position (optional)", .status = 0 },
|
{ .param = "Parameters", .config = "srvid2", .section = "", .text = "- **service ID**: Service ID (channel ID) in hexadecimal\n- **CAID**: One or more CAIDs in hexadecimal\n- **@PROVID**: Optional provider ID(s) in hexadecimal\n- **channel_name**: Channel name (optional)\n- **type**: Channel type like TV, Radio, etc. (optional)\n- **description**: Additional description (optional)\n- **provider**: Provider or satellite position (optional)", .status = 0 },
|
||||||
{ .param = "Simple", .config = "srvid2", .section = "", .text = "```\n000a:0001,0002,0003|tv name|tv|my description 1|provider 1\n000a:0004,0005,0006|radio name 2|radio|my description 2|provider 2\n000b:0006|tv name 3||my description 3|provider 3\n000b:0007|tv name 4|||provider 4\n```", .status = 0 },
|
{ .param = "Simple", .config = "srvid2", .section = "", .text = "```\n000a:0001,0002,0003|tv name|tv|my description 1|provider 1\n000a:0004,0005,0006|radio name 2|radio|my description 2|provider 2\n000b:0006|tv name 3||my description 3|provider 3\n000b:0007|tv name 4|||provider 4\n```", .status = 0 },
|
||||||
{ .param = "Service", .config = "srvid2", .section = "", .text = "```\n# Service ID 1111, CAID 0100, all provider IDs\n1111:0100|x|y|z|v\n```", .status = 0 },
|
{ .param = "Service", .config = "srvid2", .section = "", .text = "```\n# Service ID 1111, CAID 0100, all provider IDs\n1111:0100|x|y|z|v\n```", .status = 0 },
|
||||||
|
|
@ -50,6 +197,119 @@ static const struct wiki_entry wiki_entries[] = {
|
||||||
{ .param = "Channel", .config = "srvid2", .section = "", .text = "- Verify file is named oscam.srvid2\n- Check file is in correct configuration directory\n- Ensure Unix line endings (not Windows CRLF)\n- Verify CAID:ProvID:SrvID matches exactly\n- Restart OSCam after changes", .status = 0 },
|
{ .param = "Channel", .config = "srvid2", .section = "", .text = "- Verify file is named oscam.srvid2\n- Check file is in correct configuration directory\n- Ensure Unix line endings (not Windows CRLF)\n- Verify CAID:ProvID:SrvID matches exactly\n- Restart OSCam after changes", .status = 0 },
|
||||||
{ .param = "Wrong", .config = "srvid2", .section = "", .text = "- Check for duplicate entries\n- Verify provider ID priority rules\n- Ensure hexadecimal values are correct\n- Check for typos in CAID/ProvID/SrvID", .status = 0 },
|
{ .param = "Wrong", .config = "srvid2", .section = "", .text = "- Check for duplicate entries\n- Verify provider ID priority rules\n- Ensure hexadecimal values are correct\n- Check for typos in CAID/ProvID/SrvID", .status = 0 },
|
||||||
{ .param = "Memory", .config = "srvid2", .section = "", .text = "- Reduce file size by removing unused entries\n- Keep descriptions short\n- Remove unnecessary fields\n- Consider external service ID management", .status = 0 },
|
{ .param = "Memory", .config = "srvid2", .section = "", .text = "- Reduce file size by removing unused entries\n- Keep descriptions short\n- Remove unnecessary fields\n- Consider external service ID management", .status = 0 },
|
||||||
|
{ .param = "Parameters", .config = "provid", .section = "", .text = "- **caid**: Conditional Access Identification in hexadecimal (e.g., 0100, 0500, 1702)\n- **provid**: Provider ID in hexadecimal (e.g., 000000, 003411, 000401)\n- **provider**: Human-readable provider name (e.g., \"Sky Germany\", \"Canal+\")\n- **satellite**: Satellite position or transmission method (e.g., \"19.2E\", \"Astra\", \"Cable\")\n- **language**: Language code or description (e.g., \"de\", \"en\", \"fr\")", .status = 0 },
|
||||||
|
{ .param = "Basic", .config = "provid", .section = "", .text = "```\n0100:012345|MyPay-TV|Astra 19E|German\n```\n\nThis maps CAID 0100 with Provider ID 012345 to \"MyPay-TV\" on Astra 19.2E in German.", .status = 0 },
|
||||||
|
{ .param = "Real-World", .config = "provid", .section = "", .text = "```\n# Sky Germany\n1702:000000|Sky Germany S02|19.2E|de\n1833:000401|Sky Germany HD+|19.2E|de\n\n# Canal+\n0100:003311|Canal+ France|19.2E|fr\n0100:003315|Canal+ Espana|19.2E|es\n\n# HD+\n1830:003411|HDplus HD01|19.2E|de\n\n# ORF\n0D05:000000|ORF|19.2E|de\n0D05:000004|ORF ICE|19.2E|de\n\n# Mediaset\n0100:00000B|Mediaset Italy|13E|it\n```", .status = 0 },
|
||||||
|
{ .param = "With", .config = "provid", .section = "", .text = "```\n# oscam.provid\n# Provider table for OSCam\n# Format: <caid>:<provid>|<provider>|<satellite>|<language>\n\n# German Providers\n1702:000000|Sky Germany S02|19.2E|de\n1830:003411|HDplus HD01|19.2E|de\n\n# French Providers\n0100:003311|Canal+ France|19.2E|fr\n0500:032830|Fransat|5W|fr\n```", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "provid", .section = "", .text = "```\n1702:000000|Sky Germany S02|19.2E|de\n1833:000401|Sky Germany NDS|19.2E|de\n09C4:000000|Sky Germany V13|19.2E|de\n```", .status = 0 },
|
||||||
|
{ .param = "HD", .config = "provid", .section = "", .text = "```\n1830:003411|HDplus HD01|19.2E|de\n1843:003411|HDplus HD02|19.2E|de\n```", .status = 0 },
|
||||||
|
{ .param = "Canal", .config = "provid", .section = "", .text = "```\n0100:003311|Canal+ France|19.2E|fr\n0100:003315|Canal+ Espana|19.2E|es\n0100:003317|Canal+ Polska|13E|pl\n```", .status = 0 },
|
||||||
|
{ .param = "ORF", .config = "provid", .section = "", .text = "```\n0D05:000000|ORF|19.2E|de\n0D05:000004|ORF ICE|19.2E|de\n0D95:000000|ORF|19.2E|de\n0D95:000004|ORF ICE|19.2E|de\n```", .status = 0 },
|
||||||
|
{ .param = "Viaccess", .config = "provid", .section = "", .text = "```\n0500:032830|Fransat|5W|fr\n0500:042400|SRG Swiss|13E|de/fr/it\n0500:050F00|Bis TV|19.2E|fr\n```", .status = 0 },
|
||||||
|
{ .param = "Finding", .config = "provid", .section = "", .text = "1. Check OSCam logs for CAID:ProvID values\n2. Look at reader statistics in the web interface\n3. Consult online provider databases\n4. Use card information tools", .status = 0 },
|
||||||
|
{ .param = "Adding", .config = "provid", .section = "", .text = "1. Identify the CAID:ProvID from logs or web interface\n2. Research the provider name and details\n3. Add a new line with the appropriate format\n4. Restart OSCam or reload configuration\n5. Verify the display in web interface", .status = 0 },
|
||||||
|
{ .param = "Organization", .config = "provid", .section = "", .text = "- Group providers by country or encryption system\n- Use comments to separate sections\n- Keep entries alphabetically sorted within sections\n- Include satellite position for clarity", .status = 0 },
|
||||||
|
{ .param = "Naming", .config = "provid", .section = "", .text = "- Use clear, descriptive provider names\n- Include card generation if applicable (S02, HD01, etc.)\n- Specify satellite position in standard format (19.2E, 13E, etc.)\n- Use standard language codes (de, en, fr, es, it, etc.)", .status = 0 },
|
||||||
|
{ .param = "Maintenance", .config = "provid", .section = "", .text = "- Update entries when providers change\n- Remove obsolete providers marked as \"(Old)\"\n- Add new providers as they become available\n- Keep the file synchronized across your OSCam instances", .status = 0 },
|
||||||
|
{ .param = "Parameters", .config = "ird", .section = "", .text = "- **byte3**: The value of byte 3 in the ECM signature (hexadecimal)\n- **byte4-7**: The values of bytes 4 through 7 in the ECM signature (hexadecimal)\n- **CAID**: The Conditional Access Identification number (hexadecimal)\n- **SID**: The Service ID (hexadecimal)", .status = 0 },
|
||||||
|
{ .param = "Irdeto", .config = "ird", .section = "", .text = "The primary use case is with Irdeto conditional access systems:\n- Irdeto 1 (CAID 0x0600)\n- Irdeto 2 (CAID 0x0602, 0x0604, 0x0606, 0x0608, etc.)\n- Various Irdeto providers with different signature patterns", .status = 0 },
|
||||||
|
{ .param = "Automatic", .config = "ird", .section = "", .text = "When working with Irdeto cards or emulators where CAID needs to be determined from ECM signatures rather than being explicitly provided.", .status = 0 },
|
||||||
|
{ .param = "Empty", .config = "ird", .section = "", .text = "Even if you don't need signature mapping, create an empty file to suppress warnings:\n\n```bash\ntouch oscam.ird\n```", .status = 0 },
|
||||||
|
{ .param = "Signature", .config = "ird", .section = "", .text = "To populate this file, you typically need to:\n1. Analyze ECM messages from your Irdeto provider\n2. Extract the signature bytes from positions 3-7\n3. Determine the correct CAID and SID for each signature\n4. Add entries to the file", .status = 0 },
|
||||||
|
{ .param = "Testing", .config = "ird", .section = "", .text = "After adding entries:\n1. Restart OSCam\n2. Monitor logs for CAID detection\n3. Verify that channels open correctly\n4. Adjust mappings if needed", .status = 0 },
|
||||||
|
{ .param = "Parameters", .config = "srvid", .section = "", .text = "- **CAID**: One or more CAIDs in hexadecimal (max 10 per line)\n- **@PROVID**: Optional provider ID(s) in hexadecimal\n- **service ID**: Service ID (channel ID) in hexadecimal\n- **provider**: Provider or satellite position (optional)\n- **name**: Channel name (optional)\n- **type**: Channel type like TV, Radio, etc. (optional)\n- **description**: Additional description (optional)", .status = 0 },
|
||||||
|
{ .param = "Simple", .config = "srvid", .section = "", .text = "```\n0001,0002,0003:000a|my provider 1|tv name|tv|my tv package\n0004,0005,0006:000a|my provider 2|radio name 2|radio|my radio package\n0006:000b|my provider 3|tv name 3|\n```", .status = 0 },
|
||||||
|
{ .param = "CAID", .config = "srvid", .section = "", .text = "```\n# CAID 0100, all provider IDs, service ID 1111\n0100:1111:x|y|z|v\n```", .status = 0 },
|
||||||
|
{ .param = "CAID", .config = "srvid", .section = "", .text = "```\n# CAID 0100, provider ID 123456, service ID 1111\n0100@123456:1111:x|y|z|v\n```", .status = 0 },
|
||||||
|
{ .param = "CAID", .config = "srvid", .section = "", .text = "```\n# CAID 0100, all providers, service ID 1111\n0100@000000:1111:x|y|z|v\n```", .status = 0 },
|
||||||
|
{ .param = "Multiple", .config = "srvid", .section = "", .text = "```\n# CAID 0100 with provider 123456 AND CAID 0200 with provider 654321, both for service ID 1111\n0100@123456,0200@654321:1111:x|y|z|v\n```", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "srvid", .section = "", .text = "**Sky SAT:**\n\n```\n098C,098D,09F0:007F|Sky|13th Street|TV|Sky Starter Paket\n098C,098D,09F0:0085|Sky|Beate Uhse|TV|Sky Starter Paket\n098C,098D,09F0:0194|Sky|Cartoon Network|TV|Sky Starter Paket\n```\n\n**Sky Vodafone:**\n\n```\n098E,1838,1850,1854,1868:0074|Sky|Sky Cinema Action HD|TV|Sky Cinema Paket\n098E,1838,1850,1854,1868:006B|Sky|Sky Cinema Classics HD|TV|Sky Cinema Paket\n098E,1838,1850,1854,1868:008B|Sky|Sky Cinema Family HD|TV|Sky Cinema Paket\n```", .status = 0 },
|
||||||
|
{ .param = "HD", .config = "srvid", .section = "", .text = "```\n1830,1843,1860,186A,186D,09C4,098C,098D:EF10|Astra HD+|RTL HD|TV|\n1830,1843,1860,186A,186D,09C4,098C,098D:EF11|Astra HD+|VOX HD|TV|\n1830,1843,1860,186A,186D,09C4,098C,098D:EF74|Astra HD+|SAT.1 HD|TV|\n```", .status = 0 },
|
||||||
|
{ .param = "ORF", .config = "srvid", .section = "", .text = "```\n0D95,0D98,0648,0650,09C4,098C:132F|ORF Digital|ORF1 HD\n0D95,0D98,0648,0650,09C4,098C:1330|ORF Digital|ORF2 HD\n0D95,0D98,0648,0650,09C4,098C:33AC|ORF Digital|ATV HD\n```", .status = 0 },
|
||||||
|
{ .param = "Multicrypt", .config = "srvid", .section = "", .text = "For multicrypt channels, you can list all CAIDs used by the channel, including the management CAID 0000:\n\n```\n0000,1702,1837,1833,09C4,098C,0D05,0D95,0648,0D98,0650:0025|austriasat 19.2°E|AXN Action|TV|\n```\n\nThis prevents \"unknown program\" messages in the web interface and makes it easy to see all CAIDs used by a channel.", .status = 0 },
|
||||||
|
{ .param = "Finding", .config = "srvid", .section = "", .text = "Switch to the channel and check the OSCam logs:\n\n```\n2013/10/12 17:45:22 4DB510 c [DVBAPI] Receiver sends PMT command 3 for channel 0025\n2013/10/12 17:45:22 4DB510 c [ADD PID 0] CAID: 1702 ECM_PID: 1725 PROVID: 000000\n2013/10/12 17:45:22 4DB510 c [ADD PID 1] CAID: 1837 ECM_PID: 1FD1 PROVID: 000000\n2013/10/12 17:45:22 4DB510 c [ADD PID 2] CAID: 1833 ECM_PID: 1825 PROVID: 000000\n```\n\nUse these CAIDs in your oscam.srvid entry.", .status = 0 },
|
||||||
|
{ .param = "Free-to-Air", .config = "srvid", .section = "", .text = "For FTA channels, use CAID FFFE:\n\n```\nFFFE:2404|Freesat 28.2°E|Film4|TV|Movies|\n```\n\nNote: FTA CAID changed from 0000 to FFFE. Management CAID 0000 is reserved for multicrypt channels.", .status = 0 },
|
||||||
|
{ .param = "Finding", .config = "srvid", .section = "", .text = "1. Check OSCam logs for service ID information\n2. Use DVB analysis tools to scan channels\n3. Monitor ECM requests in OSCam logs\n4. Check the web interface status page\n5. Consult online channel databases", .status = 0 },
|
||||||
|
{ .param = "Extracting", .config = "srvid", .section = "", .text = "Look for lines like:\n```\n[DVBAPI] Receiver wants to demux srvid 0025 on adapter 0000\n```\n\nThe service ID is 0025 in this example.", .status = 0 },
|
||||||
|
{ .param = "Organization", .config = "srvid", .section = "", .text = "- Group channels by provider or satellite\n- Use comments to separate sections\n- Keep entries sorted by CAID and service ID\n- Document special entries", .status = 0 },
|
||||||
|
{ .param = "Naming", .config = "srvid", .section = "", .text = "- Use clear, descriptive channel names\n- Include satellite position in provider field\n- Specify channel type (TV, Radio, etc.)\n- Add useful descriptions", .status = 0 },
|
||||||
|
{ .param = "Maintenance", .config = "srvid", .section = "", .text = "- Update when channel lineups change\n- Remove obsolete channels\n- Add new channels as they appear\n- Keep synchronized with actual channel availability", .status = 0 },
|
||||||
|
{ .param = "Example", .config = "srvid", .section = "", .text = "```\n# Sky Germany SAT - 19.2E\n098C,098D,09F0:007F|Sky|13th Street|TV|Sky Starter Paket\n098C,098D,09F0:0085|Sky|Beate Uhse|TV|Sky Starter Paket\n\n# Sky Germany Vodafone - Cable\n098E,1838,1850,1854,1868:0074|Sky|Sky Cinema Action HD|TV|Sky Cinema Paket\n098E,1838,1850,1854,1868:006B|Sky|Sky Cinema Classics HD|TV|Sky Cinema Paket\n\n# HD+ - 19.2E\n1830,1843,1860,186A,186D,09C4,098C,098D:EF10|Astra HD+|RTL HD|TV|\n1830,1843,1860,186A,186D,09C4,098C,098D:EF11|Astra HD+|VOX HD|TV|\n\n# ORF Digital - 19.2E\n0D95,0D98,0648,0650,09C4,098C:132F|ORF Digital|ORF1 HD\n0D95,0D98,0648,0650,09C4,098C:1330|ORF Digital|ORF2 HD\n```", .status = 0 },
|
||||||
|
{ .param = "Channel", .config = "srvid", .section = "", .text = "- Verify file is named oscam.srvid\n- Check file is in correct configuration directory\n- Ensure Unix line endings (not Windows CRLF)\n- Verify CAID:ProvID:SrvID matches exactly\n- Restart OSCam after changes", .status = 0 },
|
||||||
|
{ .param = "Wrong", .config = "srvid", .section = "", .text = "- Check for duplicate entries\n- Verify provider ID priority rules\n- Ensure hexadecimal values are correct\n- Check for typos in CAID/ProvID/SrvID", .status = 0 },
|
||||||
|
{ .param = "Memory", .config = "srvid", .section = "", .text = "- Reduce file size by removing unused entries\n- Keep descriptions short\n- Remove unnecessary fields\n- Consider external service ID management", .status = 0 },
|
||||||
|
{ .param = "Syntax", .config = "tiers", .section = "", .text = "```\nCAID[,CAID]...:TIER_ID|description\n```", .status = 0 },
|
||||||
|
{ .param = "Format", .config = "tiers", .section = "", .text = "- **CAID**: Conditional Access ID (4-digit hexadecimal), multiple CAIDs can be specified separated by commas\n- **TIER_ID**: Tier/Channel ID (4-digit hexadecimal)\n- **description**: Human-readable description of the tier/service package\n- **:** Separator between CAID list and TIER_ID\n- **|** Separator between TIER_ID and description", .status = 0 },
|
||||||
|
{ .param = "Important", .config = "tiers", .section = "", .text = "- Use Unix text file format only (LF line endings, not CRLF)\n- Comments start with `#`\n- Multiple CAIDs can share the same TIER_ID\n- Entries should be sorted by TIER_ID within each card/provider section", .status = 0 },
|
||||||
|
{ .param = "Basic", .config = "tiers", .section = "", .text = "```\n0001,0002,0003:000a|my TIER 1\n0004:000b|my TIER 2\n0005:000b|my TIER 3\n```", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "tiers", .section = "", .text = "```\n09C4,09C7:0046|HDplus [NDS]\n09C4,09C7:007D|Sky Sport [NDS]\n09C4,09C7:0081|Sky Bundesliga [NDS]\n09C4,09C7:008E|Beate Uhse [NDS]\n09C4,09C7:00C7|Sky Welt [NDS]\n09C4,09C7:00C8|Sky Film [NDS]\n09C4,09C7:00C9|Sky Welt HD [NDS]\n09C4,09C7:00CA|Sky Film HD [NDS]\n09C4,09C7:00CB|Sky Sport HD [NDS]\n```", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "tiers", .section = "", .text = "```\n1702,1833,1722,1834:000F|Sky Sport Portal\n1702,1833,1722,1834:00F0|Sky Bundesliga\n1702,1833,1722,1834:026C|Sky Welt Extra 1\n1702,1833,1722,1834:05E7|Blue Movie Portal\n1702,1833,1722,1834:05F1|Sky Welt HD\n1702,1833,1722,1834:0614|Sky Sport News [SD/HD]\n1702,1833,1722,1834:7D21|Sky Welt\n1702,1833,1722,1834:7D22|Sky Film\n1702,1833,1722,1834:7D23|Sky Sport\n```", .status = 0 },
|
||||||
|
{ .param = "HD", .config = "tiers", .section = "", .text = "```\n# HDplus HD01 [Nagra]\n1830:0064|Gratis Jahr\n1830:0065|Ungenutzt\n1830:0BEA|HDplus Paket\n\n# HDplus HD02 [Nagra]\n1843:0066|HDplus Paket [Nagra HD02]\n1843:0067|HDplus Paket [Nagra HD02]\n1843:0BEA|HDplus Paket [Nagra HD02]\n```", .status = 0 },
|
||||||
|
{ .param = "ORF-ICE", .config = "tiers", .section = "", .text = "```\n# Provider 1\n0648:0001|ORF\n0648:0002|ATV / Private\n0648:000D|ORF-ICE Irdeto-Mode Unknown\n0648:F000|ORF-ICE Irdeto-Mode Unknown\n\n# Provider 2\n0648:0015|ORF-ICE Irdeto-Mode Unknown\n```", .status = 0 },
|
||||||
|
{ .param = "ORF", .config = "tiers", .section = "", .text = "```\n0D05,0D95:0001|ORF All\n0D05,0D95:0010|ATV\n```", .status = 0 },
|
||||||
|
{ .param = "Understanding", .config = "tiers", .section = "", .text = "TIERs (or CHIDs) are identifiers used by conditional access systems to define which services or channels a subscriber has access to. Each smartcard contains entitlements that specify which TIERs are active.", .status = 0 },
|
||||||
|
{ .param = "TIER", .config = "tiers", .section = "", .text = "To determine the TIERs available on an NDS card:\n\n1. Set OSCam debug level to 4\n2. Check bytes 11 and 12 in the line below \"Decrypted (Payload)\" in the log\n3. Use this command to extract TIER IDs:\n\n```bash\ngrep -ia -A1 'Decrypted' /tmp/oscam.log | tail -n 1 | sed 's/ */ /g' | cut -d \" \" -f16,17 | sed 's/ //g'\n```", .status = 0 },
|
||||||
|
{ .param = "WebIF", .config = "tiers", .section = "", .text = "Starting with OSCam 1.20-unstable r5920:\n- If no TIER/CHID assignments are found in `oscam.tiers`\n- OSCam will display CAID/Provider assignments from `oscam.provid` in the WebIF (if available)\n- This provides fallback information when tier definitions are not configured", .status = 0 },
|
||||||
|
{ .param = "Organizing", .config = "tiers", .section = "", .text = "1. **Group by Provider**: Keep all entries for the same provider together\n2. **Add Comments**: Use comments to identify provider and card type\n3. **Sort by TIER_ID**: Within each provider section, sort entries by TIER_ID (ascending)\n4. **Include Date**: Add a date comment when updating the file", .status = 0 },
|
||||||
|
{ .param = "Example", .config = "tiers", .section = "", .text = "```\n# oscam.tiers\n# Last updated: 2024-01-15\n# Source: http://www.streamboard.tv/wiki/Tiers\n\n# ============================================\n# Sky Germany V13/G02/G09 [NDS]\n# ============================================\n09C4,09C7:0046|HDplus [NDS]\n09C4,09C7:007D|Sky Sport [NDS]\n# ... more entries ...\n\n# ============================================\n# HD+ [Nagra]\n# ============================================\n1830,1843:0064|HD+ Gratisjahr (HD01)\n1830,1843:0BEA|Jahresabo HD+\n# ... more entries ...\n```", .status = 0 },
|
||||||
|
{ .param = "Maintaining", .config = "tiers", .section = "", .text = "- TIERs can change when providers update their systems\n- Keep your `oscam.tiers` file updated with current information\n- Community resources like the Streamboard Wiki maintain updated TIER lists\n- Test your configuration after updates to ensure correct display in WebIF", .status = 0 },
|
||||||
|
{ .param = "Supported", .config = "tiers", .section = "", .text = "The `oscam.tiers` file commonly includes definitions for:\n\n- **Sky Germany**: NDS (09C4, 09C7) and Nagra (1702, 1833, 1722, 1834) systems\n- **HD+**: Nagra systems (1830, 1843)\n- **ORF**: Irdeto (0648, 0650) and CryptoWorks (0D05, 0D95) systems\n- **Unity Media**: Nagra systems (1722, 1831, 1835, 1838)\n- **MTV Unlimited**: Conax systems (0B00)", .status = 0 },
|
||||||
|
{ .param = "CAID", .config = "tiers", .section = "", .text = "Common CAIDs used in tier definitions:\n\n- **09C4, 09C7, 098C**: NDS (VideoGuard) - Sky Germany\n- **1702, 1722, 1833, 1834**: Nagra - Sky Germany\n- **1830, 1843**: Nagra - HD+\n- **0648, 0650**: Irdeto - ORF\n- **0D05, 0D95, 0D98**: CryptoWorks - ORF\n- **0B00**: Conax - MTV Unlimited", .status = 0 },
|
||||||
|
{ .param = "TIERs", .config = "tiers", .section = "", .text = "1. **Check File Format**: Ensure Unix line endings (LF, not CRLF)\n2. **Verify Syntax**: Check for correct format with colons and pipes\n3. **Match CAIDs**: Ensure CAIDs in the file match your card's CAID\n4. **Check Permissions**: Verify OSCam can read the file\n5. **Restart OSCam**: Changes require OSCam restart to take effect", .status = 0 },
|
||||||
|
{ .param = "Finding", .config = "tiers", .section = "", .text = "If you need to identify unknown TIER IDs:\n\n1. Enable debug logging in OSCam (set debug level to 4)\n2. Monitor the log file during card initialization\n3. Look for \"Decrypted (Payload)\" entries\n4. Extract bytes 11-12 for the TIER ID\n5. Add the new TIER to your configuration file", .status = 0 },
|
||||||
|
{ .param = "Incorrect", .config = "tiers", .section = "", .text = "- Verify TIER_ID matches the actual service\n- Check for typos in hexadecimal values\n- Consult community resources for accurate descriptions\n- Update from maintained TIER lists", .status = 0 },
|
||||||
|
{ .param = "Parameters", .config = "cert", .section = "", .text = "- **CAID**: Conditional Access Identification - numeric identifier for the encryption provider (in hexadecimal)\n- **reserved**: Reserved field (typically set to 00000000)\n- **IPK**: Issuer Public Key or session key in hexadecimal format", .status = 0 },
|
||||||
|
{ .param = "Cryptoworks", .config = "cert", .section = "", .text = "This file is specifically designed for Cryptoworks conditional access systems where:\n- Issuer Public Keys are required for decryption\n- Session keys need to be mapped to specific CAIDs\n- Multiple providers may use different keys", .status = 0 },
|
||||||
|
{ .param = "Key", .config = "cert", .section = "", .text = "The file provides a centralized location for:\n- Storing cryptographic keys\n- Managing multiple CAID mappings\n- Updating keys without modifying other configuration files", .status = 0 },
|
||||||
|
{ .param = "Parameters", .config = "guess", .section = "", .text = "- **length of ECM**: The length of the ECM message in hexadecimal format\n- **CAID**: The Conditional Access Identification number in hexadecimal format", .status = 0 },
|
||||||
|
{ .param = "BOMBA", .config = "guess", .section = "", .text = "The primary use case is with the BOMBA protocol, which does not transmit CAID information:\n\n```\n# BOMBA protocol CAID guessing\n10:0B00\n12:0D00\n14:0E00\n```", .status = 0 },
|
||||||
|
{ .param = "Legacy", .config = "guess", .section = "", .text = "Some older or proprietary protocols may also benefit from CAID guessing:\n- Custom card sharing protocols\n- Modified or stripped-down protocols\n- Legacy conditional access systems", .status = 0 },
|
||||||
|
{ .param = "m", .config = "whitelist", .section = "", .text = "```\nm: 3456:123456::::: 4567:234567:\n```\n\nUsed for mapping between different identifiers.", .status = 0 },
|
||||||
|
{ .param = "w", .config = "whitelist", .section = "", .text = "```\nw: [CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```\n\nDefines ECM length whitelisting rules. Only ECMs matching these criteria will be processed.", .status = 0 },
|
||||||
|
{ .param = "l", .config = "whitelist", .section = "", .text = "```\nl: [CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```\n\nECM length whitelisting that does not proceed with any other ECM length. This is an abbreviation for normal ECM length whitelisting using the `w:` parameter.", .status = 0 },
|
||||||
|
{ .param = "i", .config = "whitelist", .section = "", .text = "```\ni: [CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```\n\nIgnores ECM requests matching the specified criteria.", .status = 0 },
|
||||||
|
{ .param = "Field", .config = "whitelist", .section = "", .text = "```\n[prefix]:[CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```", .status = 0 },
|
||||||
|
{ .param = "Field", .config = "whitelist", .section = "", .text = "- **prefix**: Entry type (`m`, `w`, `l`, or `i`)\n- **CAID**: Conditional Access ID (4-digit hexadecimal)\n- **provider ID**: Provider identifier (hexadecimal)\n- **service ID**: Service identifier (hexadecimal)\n- **ECM PID**: ECM Process ID (hexadecimal)\n- **CHID**: Channel ID (hexadecimal)\n- **ECM length**: ECM length in bytes (decimal), multiple values separated by commas\n\nAll fields after the prefix are optional. Empty fields are indicated by consecutive colons.", .status = 0 },
|
||||||
|
{ .param = "Basic", .config = "whitelist", .section = "", .text = "```\n# Whitelist all CAID 0100\nw:0100\n\n# Ignore CAID 0200 with service ID 1234\ni:0200::1234\n\n# Ignore CHID 2345\ni:::::2345\n\n# Allow all others (blacklist mode)\nw:\n```", .status = 0 },
|
||||||
|
{ .param = "Provider-Specific", .config = "whitelist", .section = "", .text = "#### Sky Germany S02 (Nagra)\n\n```\n# S02\nw:1702:000000::::93\n```\n\n#### Sky Germany S02-Tunnel\n\n```\n# S02-Tunnel\nw:1833:000000::::89\n```\n\n#### Sky Germany V13 (NDS)\n\n```\n# V13\nw:09C4:000000::::46,58,90,95\n```\n\n#### HD+ (Nagra)\n\n```\n# HD+\nw:1830:000000::::92\nw:1830:003411::::92\nw:1830:008011::::92\n```\n\n#### ORF (CryptoWorks)\n\n```\n# CAMD3-Keys\nw:0D05:::::9C\n```", .status = 0 },
|
||||||
|
{ .param = "Whitelist", .config = "whitelist", .section = "", .text = "In whitelist mode, only explicitly allowed ECMs are processed:\n\n```\n# Allow only specific CAIDs\nw:1702\nw:09C4\nw:1830\n\n# Block everything else (implicit - no w: at end)\n```", .status = 0 },
|
||||||
|
{ .param = "Blacklist", .config = "whitelist", .section = "", .text = "In blacklist mode, all ECMs are allowed except those explicitly blocked:\n\n```\n# Block specific problematic services\ni:0500::1234\ni:0100::5678\n\n# Allow everything else\nw:\n```", .status = 0 },
|
||||||
|
{ .param = "Mixed", .config = "whitelist", .section = "", .text = "Combine whitelist and blacklist rules:\n\n```\n# Whitelist specific CAID with certain ECM lengths\nw:1702:000000::::93\n\n# Ignore problematic service\ni:0500::1234\n\n# Allow all other CAIDs\nw:\n```", .status = 0 },
|
||||||
|
{ .param = "Optimizing", .config = "whitelist", .section = "", .text = "1. **Be Specific**: Use specific rules to reduce processing overhead\n2. **Order Matters**: Place most frequently matched rules at the top\n3. **Minimize Entries**: Only include rules you actually need\n4. **Memory Consideration**: Avoid copying entire whitelist databases; use only what you need", .status = 0 },
|
||||||
|
{ .param = "Finding", .config = "whitelist", .section = "", .text = "To determine ECM lengths for your setup:\n\n1. Enable debug logging in OSCam\n2. Monitor ECM requests in the log\n3. Note the ECM lengths for services you want to whitelist\n4. Add appropriate entries to oscam.whitelist", .status = 0 },
|
||||||
|
{ .param = "Testing", .config = "whitelist", .section = "", .text = "1. Start with a permissive configuration (`w:` at the end)\n2. Add ignore rules for problematic services\n3. Monitor logs to verify filtering is working\n4. Gradually refine rules based on actual usage", .status = 0 },
|
||||||
|
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:1702\n```", .status = 0 },
|
||||||
|
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:1702:000000\n```", .status = 0 },
|
||||||
|
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:09C4:000000::::46,58,90,95\n```", .status = 0 },
|
||||||
|
{ .param = "Ignore", .config = "whitelist", .section = "", .text = "```\ni:0500::1234\n```", .status = 0 },
|
||||||
|
{ .param = "Ignore", .config = "whitelist", .section = "", .text = "```\ni:::::2345\n```", .status = 0 },
|
||||||
|
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:\n```", .status = 0 },
|
||||||
|
{ .param = "No", .config = "whitelist", .section = "", .text = "- Check if you have a catch-all `w:` rule at the end\n- Verify your whitelist rules match your actual CAIDs\n- Check for typos in hexadecimal values\n- Ensure file has proper permissions", .status = 0 },
|
||||||
|
{ .param = "Wrong", .config = "whitelist", .section = "", .text = "- Review rule order (first match wins)\n- Check for overlapping rules\n- Verify ECM lengths are correct\n- Enable debug logging to see which rules are matching", .status = 0 },
|
||||||
|
{ .param = "Performance", .config = "whitelist", .section = "", .text = "- Reduce number of rules\n- Use more specific rules to match faster\n- Remove unused entries\n- Consider using only essential whitelisting", .status = 0 },
|
||||||
|
{ .param = "oscam", .config = "whitelist", .section = "", .text = "The whitelist file works in conjunction with oscam.conf settings:\n\n```ini\n[global]\n# Enable ECM length filtering\necmwhitelist = /path/to/oscam.whitelist\n```", .status = 0 },
|
||||||
|
{ .param = "Related", .config = "whitelist", .section = "", .text = "- **oscam.conf**: Main configuration file\n- **oscam.services**: Service definitions\n- **oscam.user**: User-specific settings that may override whitelist behavior", .status = 0 },
|
||||||
|
{ .param = "Combining", .config = "whitelist", .section = "", .text = "```\n# Whitelist specific CAID, provider, and ECM length\nw:1702:000000::::93\n\n# Ignore specific CAID and service combination\ni:0500:123456:1234\n```", .status = 0 },
|
||||||
|
{ .param = "Provider-Specific", .config = "whitelist", .section = "", .text = "```\n# Allow HD+ with all providers\nw:1830:000000::::92\nw:1830:003411::::92\nw:1830:008011::::92\n\n# Block specific problematic provider\ni:0500:BADPROV\n```", .status = 0 },
|
||||||
|
{ .param = "Service-Level", .config = "whitelist", .section = "", .text = "```\n# Allow specific services only\nw:1702::SERVICE1\nw:1702::SERVICE2\n\n# Block all others (no catch-all w:)\n```", .status = 0 },
|
||||||
|
{ .param = "Required", .config = "services", .section = "", .text = "All parameters are required for each service definition:\n\n- **[service name]**: Unique name for the service group (section header)\n- **caid**: One or more CAIDs in hexadecimal, comma-separated\n- **provid**: One or more Provider IDs in hexadecimal, comma-separated\n- **srvid**: One or more Service IDs in hexadecimal, comma-separated", .status = 0 },
|
||||||
|
{ .param = "Optional", .config = "services", .section = "", .text = "These parameters were added in SVN revision 11588 (August 23, 2020):\n\n- **disablecrccws_only_for_exception**: Define service as exception for disablecrccws_only_for settings (0|1, default: 0)\n- **no_wait_time**: Define service as wait_time exception (0|1, default: 0)\n- **lg_only_exception**: Define service as localgenerated-only exception for cache exchange (0|1, default: 0)", .status = 0 },
|
||||||
|
{ .param = "HD", .config = "services", .section = "", .text = "```\n[hdplus]\ncaid = 1830,1843,1860,186A,186D\nprovid =\nsrvid = 0002,126E,126F,1519,151A,157C,157F,1581,183D,2774,2E9B,2EAF,307A,30D6,5274,6FEC,6FEE,EF10,EF11,EF14,EF15,EF16,EF17,EF74,EF75,EF76,EF77,EF78,EF79,EF7A,07E4,07D0,07EE,07F8\n```", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "services", .section = "", .text = "```\n[SAT-Sky-Starter-Paket]\ncaid = 098C,098D,09F0\nprovid =\nsrvid = 007F,0085,0194,0192,0016,0071,0191,00A8,0082,0077,0206,000D,0070,0017,0076,0093,007C,008E,006C,007E,0065,0088,007B\n```", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "services", .section = "", .text = "```\n[SAT-Sky-Sport-UHD]\ncaid = 098C,098D,09F0\nprovid =\nsrvid = 0228,0229\n```", .status = 0 },
|
||||||
|
{ .param = "Sky", .config = "services", .section = "", .text = "```\n[UM-Sky-Sport-Paket]\ncaid = 098E,1838,1850,1854,1868\nprovid =\nsrvid = 010C,0116,0120,012A,0134,013E,0148,0152,0102,010D,0011,0091,0090,008D,0072,0081\n```", .status = 0 },
|
||||||
|
{ .param = "ORF", .config = "services", .section = "", .text = "```\n[orfcw]\ncaid = 0D95,0D98\nprovid =\nsrvid = 32C9,32CA,32CB,32CC,32CD,32CE,32CF,32D0,32D1,32D2,32D3,32D6,32D4,33A7,4E27,33A5,332D,3337,132F,1330,33AC,33FD,1334,33FA,33FB,33FC,33F5,33F6,33F7,33F8,33F9,1331,33FC,14B8\n```", .status = 0 },
|
||||||
|
{ .param = "With", .config = "services", .section = "", .text = "```\n[special_service]\ncaid = 0100\nprovid = 000001\nsrvid = 5000,5001\ndisablecrccws_only_for_exception = 1\nno_wait_time = 1\nlg_only_exception = 1\n```\n\nThis service is configured with all exception flags enabled for special handling.", .status = 0 },
|
||||||
|
{ .param = "Separate", .config = "services", .section = "", .text = "```\n[sky_sport_channels]\ncaid = 098C,098D,09F0\nprovid =\nsrvid = 0228,0229,010C,0116\n\n[sky_cinema_channels]\ncaid = 098E,1838,1850,1854,1868\nprovid =\nsrvid = 0074,006B,008B\n\n[hd_basic_channels]\ncaid = 1830,1843,1860,186A,186D\nprovid =\nsrvid = EF10,EF11,EF74,EF75\n```", .status = 0 },
|
||||||
|
{ .param = "In", .config = "services", .section = "", .text = "```\n[account]\nuser = john\npwd = password\nservices = hdplus,SAT-Sky-Starter-Paket\n```\n\nUser \"john\" can only access channels defined in hdplus and SAT-Sky-Starter-Paket service groups.", .status = 0 },
|
||||||
|
{ .param = "In", .config = "services", .section = "", .text = "```\n[reader]\nlabel = myreader\nprotocol = internal\ndevice = /dev/sci0\nservices = orfcw,hdplus\n```\n\nThis reader is restricted to only serve channels defined in the orfcw and hdplus service groups.", .status = 0 },
|
||||||
|
{ .param = "Naming", .config = "services", .section = "", .text = "- Use descriptive, meaningful service names\n- Use lowercase with underscores (e.g., sky_de_sport)\n- Group related channels logically\n- Keep names short but clear", .status = 0 },
|
||||||
|
{ .param = "Organization", .config = "services", .section = "", .text = "- Group services by provider or package\n- Separate by content type (sports, movies, kids, etc.)\n- Use comments to document service groups\n- Keep related services together in the file", .status = 0 },
|
||||||
|
{ .param = "Maintenance", .config = "services", .section = "", .text = "- Document which channels belong to each service\n- Update service definitions when channel lineups change\n- Remove obsolete service definitions\n- Test service restrictions after changes", .status = 0 },
|
||||||
|
{ .param = "Performance", .config = "services", .section = "", .text = "- Stay within the 64-service limit per reader\n- Combine related channels into single services when possible\n- Avoid overly granular service definitions\n- Balance between flexibility and simplicity", .status = 0 },
|
||||||
|
{ .param = "User", .config = "services", .section = "", .text = "- Verify the service is assigned to the user in oscam.user\n- Check that the service definition includes the correct CAID/ProvID/SrvID\n- Ensure service names match exactly (case-sensitive)\n- Verify the reader has access to the service", .status = 0 },
|
||||||
|
{ .param = "Service", .config = "services", .section = "", .text = "- Check for typos in service names\n- Verify hexadecimal values are correct\n- Ensure all required parameters are present\n- Check for duplicate service names", .status = 0 },
|
||||||
|
{ .param = "64-Service", .config = "services", .section = "", .text = "- Consolidate similar services\n- Remove unused service definitions\n- Use broader service definitions\n- Consider splitting across multiple readers", .status = 0 },
|
||||||
{ .param = "enableled", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nLED-Support.\n\n```ini\nenableled = 0 # LED support disabled (default)\nenableled = 1 # LED support enabled for routers\nenableled = 2 # LED support enabled for Qbox HD\n```\n\n**Format:**\n```ini\nenableled = 0|1|2\n```\n\n**Example:**\n```ini\nenableled = 1\n```\n\n**Default:**\n```ini\nenableled = 0\n```", .status = 0 },
|
{ .param = "enableled", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nLED-Support.\n\n```ini\nenableled = 0 # LED support disabled (default)\nenableled = 1 # LED support enabled for routers\nenableled = 2 # LED support enabled for Qbox HD\n```\n\n**Format:**\n```ini\nenableled = 0|1|2\n```\n\n**Example:**\n```ini\nenableled = 1\n```\n\n**Default:**\n```ini\nenableled = 0\n```", .status = 0 },
|
||||||
{ .param = "disablelog", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nSwitches logfile **off**.\n\n```ini\ndisablelog = 0 # log (default)\ndisablelog = 1 # no log\n```\n\n**Format:**\n```ini\ndisablelog = 0|1\n```\n\n**Example:**\n```ini\ndisablelog = 1\n```\n\n**Default:**\n```ini\ndisablelog = 0\n```", .status = 0 },
|
{ .param = "disablelog", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nSwitches logfile **off**.\n\n```ini\ndisablelog = 0 # log (default)\ndisablelog = 1 # no log\n```\n\n**Format:**\n```ini\ndisablelog = 0|1\n```\n\n**Example:**\n```ini\ndisablelog = 1\n```\n\n**Default:**\n```ini\ndisablelog = 0\n```", .status = 0 },
|
||||||
{ .param = "loghistorylines", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` or `MODULE_MONITOR` compilation flag)**\n\nNumber of log lines to keep in memory for display in WebIF status page.\n\n**Format:**\n```ini\nloghistorylines = count\n```\n\n**Example:**\n```ini\nloghistorylines = 512\n```\n\n**Default:**\n```ini\nloghistorylines = 256\n```\n\nMinimum value is 64. Values below 64 are adjusted automatically.", .status = 0 },
|
{ .param = "loghistorylines", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` or `MODULE_MONITOR` compilation flag)**\n\nNumber of log lines to keep in memory for display in WebIF status page.\n\n**Format:**\n```ini\nloghistorylines = count\n```\n\n**Example:**\n```ini\nloghistorylines = 512\n```\n\n**Default:**\n```ini\nloghistorylines = 256\n```\n\nMinimum value is 64. Values below 64 are adjusted automatically.", .status = 0 },
|
||||||
|
|
@ -276,93 +536,6 @@ static const struct wiki_entry wiki_entries[] = {
|
||||||
{ .param = "oscam", .config = "cacheex", .section = "", .text = "- `cacheexwaittime` - Wait time for CE1 response\n- `max_cache_time` - Cache retention time\n- `max_cache_count` - Maximum ECMs in cache\n\nSee the oscam.conf documentation for complete cache exchange settings.", .status = 0 },
|
{ .param = "oscam", .config = "cacheex", .section = "", .text = "- `cacheexwaittime` - Wait time for CE1 response\n- `max_cache_time` - Cache retention time\n- `max_cache_count` - Maximum ECMs in cache\n\nSee the oscam.conf documentation for complete cache exchange settings.", .status = 0 },
|
||||||
{ .param = "oscam", .config = "cacheex", .section = "", .text = "- `cacheex` - Cache exchange mode (1, 2, or 3)\n- `cacheex_maxhop` - Maximum hops for cache forwarding\n- `cacheex_ecm_filter` - Filter which CAIDs are exchanged\n\nSee the oscam.server documentation for reader-specific cache exchange parameters.", .status = 0 },
|
{ .param = "oscam", .config = "cacheex", .section = "", .text = "- `cacheex` - Cache exchange mode (1, 2, or 3)\n- `cacheex_maxhop` - Maximum hops for cache forwarding\n- `cacheex_ecm_filter` - Filter which CAIDs are exchanged\n\nSee the oscam.server documentation for reader-specific cache exchange parameters.", .status = 0 },
|
||||||
{ .param = "oscam", .config = "cacheex", .section = "", .text = "- `cacheex` - User cache exchange permission\n- `cacheex_maxhop` - Maximum hops for this user\n\nSee the oscam.user documentation for user cache exchange settings.", .status = 0 },
|
{ .param = "oscam", .config = "cacheex", .section = "", .text = "- `cacheex` - User cache exchange permission\n- `cacheex_maxhop` - Maximum hops for this user\n\nSee the oscam.user documentation for user cache exchange settings.", .status = 0 },
|
||||||
{ .param = "Parameters", .config = "provid", .section = "", .text = "- **caid**: Conditional Access Identification in hexadecimal (e.g., 0100, 0500, 1702)\n- **provid**: Provider ID in hexadecimal (e.g., 000000, 003411, 000401)\n- **provider**: Human-readable provider name (e.g., \"Sky Germany\", \"Canal+\")\n- **satellite**: Satellite position or transmission method (e.g., \"19.2E\", \"Astra\", \"Cable\")\n- **language**: Language code or description (e.g., \"de\", \"en\", \"fr\")", .status = 0 },
|
|
||||||
{ .param = "Basic", .config = "provid", .section = "", .text = "```\n0100:012345|MyPay-TV|Astra 19E|German\n```\n\nThis maps CAID 0100 with Provider ID 012345 to \"MyPay-TV\" on Astra 19.2E in German.", .status = 0 },
|
|
||||||
{ .param = "Real-World", .config = "provid", .section = "", .text = "```\n# Sky Germany\n1702:000000|Sky Germany S02|19.2E|de\n1833:000401|Sky Germany HD+|19.2E|de\n\n# Canal+\n0100:003311|Canal+ France|19.2E|fr\n0100:003315|Canal+ Espana|19.2E|es\n\n# HD+\n1830:003411|HDplus HD01|19.2E|de\n\n# ORF\n0D05:000000|ORF|19.2E|de\n0D05:000004|ORF ICE|19.2E|de\n\n# Mediaset\n0100:00000B|Mediaset Italy|13E|it\n```", .status = 0 },
|
|
||||||
{ .param = "With", .config = "provid", .section = "", .text = "```\n# oscam.provid\n# Provider table for OSCam\n# Format: <caid>:<provid>|<provider>|<satellite>|<language>\n\n# German Providers\n1702:000000|Sky Germany S02|19.2E|de\n1830:003411|HDplus HD01|19.2E|de\n\n# French Providers\n0100:003311|Canal+ France|19.2E|fr\n0500:032830|Fransat|5W|fr\n```", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "provid", .section = "", .text = "```\n1702:000000|Sky Germany S02|19.2E|de\n1833:000401|Sky Germany NDS|19.2E|de\n09C4:000000|Sky Germany V13|19.2E|de\n```", .status = 0 },
|
|
||||||
{ .param = "HD", .config = "provid", .section = "", .text = "```\n1830:003411|HDplus HD01|19.2E|de\n1843:003411|HDplus HD02|19.2E|de\n```", .status = 0 },
|
|
||||||
{ .param = "Canal", .config = "provid", .section = "", .text = "```\n0100:003311|Canal+ France|19.2E|fr\n0100:003315|Canal+ Espana|19.2E|es\n0100:003317|Canal+ Polska|13E|pl\n```", .status = 0 },
|
|
||||||
{ .param = "ORF", .config = "provid", .section = "", .text = "```\n0D05:000000|ORF|19.2E|de\n0D05:000004|ORF ICE|19.2E|de\n0D95:000000|ORF|19.2E|de\n0D95:000004|ORF ICE|19.2E|de\n```", .status = 0 },
|
|
||||||
{ .param = "Viaccess", .config = "provid", .section = "", .text = "```\n0500:032830|Fransat|5W|fr\n0500:042400|SRG Swiss|13E|de/fr/it\n0500:050F00|Bis TV|19.2E|fr\n```", .status = 0 },
|
|
||||||
{ .param = "Finding", .config = "provid", .section = "", .text = "1. Check OSCam logs for CAID:ProvID values\n2. Look at reader statistics in the web interface\n3. Consult online provider databases\n4. Use card information tools", .status = 0 },
|
|
||||||
{ .param = "Adding", .config = "provid", .section = "", .text = "1. Identify the CAID:ProvID from logs or web interface\n2. Research the provider name and details\n3. Add a new line with the appropriate format\n4. Restart OSCam or reload configuration\n5. Verify the display in web interface", .status = 0 },
|
|
||||||
{ .param = "Organization", .config = "provid", .section = "", .text = "- Group providers by country or encryption system\n- Use comments to separate sections\n- Keep entries alphabetically sorted within sections\n- Include satellite position for clarity", .status = 0 },
|
|
||||||
{ .param = "Naming", .config = "provid", .section = "", .text = "- Use clear, descriptive provider names\n- Include card generation if applicable (S02, HD01, etc.)\n- Specify satellite position in standard format (19.2E, 13E, etc.)\n- Use standard language codes (de, en, fr, es, it, etc.)", .status = 0 },
|
|
||||||
{ .param = "Maintenance", .config = "provid", .section = "", .text = "- Update entries when providers change\n- Remove obsolete providers marked as \"(Old)\"\n- Add new providers as they become available\n- Keep the file synchronized across your OSCam instances", .status = 0 },
|
|
||||||
{ .param = "Parameters", .config = "ird", .section = "", .text = "- **byte3**: The value of byte 3 in the ECM signature (hexadecimal)\n- **byte4-7**: The values of bytes 4 through 7 in the ECM signature (hexadecimal)\n- **CAID**: The Conditional Access Identification number (hexadecimal)\n- **SID**: The Service ID (hexadecimal)", .status = 0 },
|
|
||||||
{ .param = "Irdeto", .config = "ird", .section = "", .text = "The primary use case is with Irdeto conditional access systems:\n- Irdeto 1 (CAID 0x0600)\n- Irdeto 2 (CAID 0x0602, 0x0604, 0x0606, 0x0608, etc.)\n- Various Irdeto providers with different signature patterns", .status = 0 },
|
|
||||||
{ .param = "Automatic", .config = "ird", .section = "", .text = "When working with Irdeto cards or emulators where CAID needs to be determined from ECM signatures rather than being explicitly provided.", .status = 0 },
|
|
||||||
{ .param = "Empty", .config = "ird", .section = "", .text = "Even if you don't need signature mapping, create an empty file to suppress warnings:\n\n```bash\ntouch oscam.ird\n```", .status = 0 },
|
|
||||||
{ .param = "Signature", .config = "ird", .section = "", .text = "To populate this file, you typically need to:\n1. Analyze ECM messages from your Irdeto provider\n2. Extract the signature bytes from positions 3-7\n3. Determine the correct CAID and SID for each signature\n4. Add entries to the file", .status = 0 },
|
|
||||||
{ .param = "Testing", .config = "ird", .section = "", .text = "After adding entries:\n1. Restart OSCam\n2. Monitor logs for CAID detection\n3. Verify that channels open correctly\n4. Adjust mappings if needed", .status = 0 },
|
|
||||||
{ .param = "Parameters", .config = "ac", .section = "", .text = "- **CAID**: Conditional Access Identification - numeric identifier for the encryption provider\n- **provider ID**: Numeric identifier for the Pay TV provider\n- **seconds**: Time interval in seconds defining the minimum time between control word changes\n\nThe asterisk (*) can be used to define a default value for all providers not explicitly listed.", .status = 0 },
|
|
||||||
{ .param = "Basic", .config = "ac", .section = "", .text = "```\n0100:000000=10\n*=7\n```\n\nFor CAID 0100 with provider 000000, the time interval is set to 10 seconds. For all other CAIDs not explicitly defined, the default interval is 7 seconds.", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "ac", .section = "", .text = "```\n1702:000000 = 7 # Sky S02 - 7 second interval\n1833:000401 = 7 # HD+ - 7 second interval\n*=7 # Default 7 seconds for all other providers\n```", .status = 0 },
|
|
||||||
{ .param = "Alternative", .config = "ac", .section = "", .text = "```\n1702:000000 = 10 # Sky S02 - 10 second interval\n1833:000401 = 10 # HD+ - 10 second interval\n*=7 # Default 7 seconds for all other providers\n```", .status = 0 },
|
|
||||||
{ .param = "Multiple", .config = "ac", .section = "", .text = "```\n0100:000000=10 # Provider 1 - 10 seconds\n0200:000001=8 # Provider 2 - 8 seconds\n0300:000002=12 # Provider 3 - 12 seconds\n*=7 # Default for all others\n```", .status = 0 },
|
|
||||||
{ .param = "Choosing", .config = "ac", .section = "", .text = "- Typical intervals range from 7 to 10 seconds\n- Shorter intervals (5-7 seconds) provide stricter anti-cascading protection\n- Longer intervals (10-15 seconds) are more lenient but may miss some cascading attempts\n- Consider the normal channel switching behavior of legitimate users", .status = 0 },
|
|
||||||
{ .param = "Configuration", .config = "ac", .section = "", .text = "1. Start with a default value using the wildcard (*) entry\n2. Add specific entries for high-value providers that need stricter control\n3. Test the configuration to ensure legitimate users aren't affected\n4. Monitor logs for potential cascading attempts", .status = 0 },
|
|
||||||
{ .param = "Common", .config = "ac", .section = "", .text = "- **1702:000000**: Sky Germany (S02 cards)\n- **1833:000401**: HD+ Germany\n- **0100:000000**: Seca/Mediaguard systems\n- **0500:000000**: Viaccess systems\n- **0D95:000000**: ORF ICE", .status = 0 },
|
|
||||||
{ .param = "Required", .config = "services", .section = "", .text = "All parameters are required for each service definition:\n\n- **[service name]**: Unique name for the service group (section header)\n- **caid**: One or more CAIDs in hexadecimal, comma-separated\n- **provid**: One or more Provider IDs in hexadecimal, comma-separated\n- **srvid**: One or more Service IDs in hexadecimal, comma-separated", .status = 0 },
|
|
||||||
{ .param = "Optional", .config = "services", .section = "", .text = "These parameters were added in SVN revision 11588 (August 23, 2020):\n\n- **disablecrccws_only_for_exception**: Define service as exception for disablecrccws_only_for settings (0|1, default: 0)\n- **no_wait_time**: Define service as wait_time exception (0|1, default: 0)\n- **lg_only_exception**: Define service as localgenerated-only exception for cache exchange (0|1, default: 0)", .status = 0 },
|
|
||||||
{ .param = "HD", .config = "services", .section = "", .text = "```\n[hdplus]\ncaid = 1830,1843,1860,186A,186D\nprovid =\nsrvid = 0002,126E,126F,1519,151A,157C,157F,1581,183D,2774,2E9B,2EAF,307A,30D6,5274,6FEC,6FEE,EF10,EF11,EF14,EF15,EF16,EF17,EF74,EF75,EF76,EF77,EF78,EF79,EF7A,07E4,07D0,07EE,07F8\n```", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "services", .section = "", .text = "```\n[SAT-Sky-Starter-Paket]\ncaid = 098C,098D,09F0\nprovid =\nsrvid = 007F,0085,0194,0192,0016,0071,0191,00A8,0082,0077,0206,000D,0070,0017,0076,0093,007C,008E,006C,007E,0065,0088,007B\n```", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "services", .section = "", .text = "```\n[SAT-Sky-Sport-UHD]\ncaid = 098C,098D,09F0\nprovid =\nsrvid = 0228,0229\n```", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "services", .section = "", .text = "```\n[UM-Sky-Sport-Paket]\ncaid = 098E,1838,1850,1854,1868\nprovid =\nsrvid = 010C,0116,0120,012A,0134,013E,0148,0152,0102,010D,0011,0091,0090,008D,0072,0081\n```", .status = 0 },
|
|
||||||
{ .param = "ORF", .config = "services", .section = "", .text = "```\n[orfcw]\ncaid = 0D95,0D98\nprovid =\nsrvid = 32C9,32CA,32CB,32CC,32CD,32CE,32CF,32D0,32D1,32D2,32D3,32D6,32D4,33A7,4E27,33A5,332D,3337,132F,1330,33AC,33FD,1334,33FA,33FB,33FC,33F5,33F6,33F7,33F8,33F9,1331,33FC,14B8\n```", .status = 0 },
|
|
||||||
{ .param = "With", .config = "services", .section = "", .text = "```\n[special_service]\ncaid = 0100\nprovid = 000001\nsrvid = 5000,5001\ndisablecrccws_only_for_exception = 1\nno_wait_time = 1\nlg_only_exception = 1\n```\n\nThis service is configured with all exception flags enabled for special handling.", .status = 0 },
|
|
||||||
{ .param = "Separate", .config = "services", .section = "", .text = "```\n[sky_sport_channels]\ncaid = 098C,098D,09F0\nprovid =\nsrvid = 0228,0229,010C,0116\n\n[sky_cinema_channels]\ncaid = 098E,1838,1850,1854,1868\nprovid =\nsrvid = 0074,006B,008B\n\n[hd_basic_channels]\ncaid = 1830,1843,1860,186A,186D\nprovid =\nsrvid = EF10,EF11,EF74,EF75\n```", .status = 0 },
|
|
||||||
{ .param = "In", .config = "services", .section = "", .text = "```\n[account]\nuser = john\npwd = password\nservices = hdplus,SAT-Sky-Starter-Paket\n```\n\nUser \"john\" can only access channels defined in hdplus and SAT-Sky-Starter-Paket service groups.", .status = 0 },
|
|
||||||
{ .param = "In", .config = "services", .section = "", .text = "```\n[reader]\nlabel = myreader\nprotocol = internal\ndevice = /dev/sci0\nservices = orfcw,hdplus\n```\n\nThis reader is restricted to only serve channels defined in the orfcw and hdplus service groups.", .status = 0 },
|
|
||||||
{ .param = "Naming", .config = "services", .section = "", .text = "- Use descriptive, meaningful service names\n- Use lowercase with underscores (e.g., sky_de_sport)\n- Group related channels logically\n- Keep names short but clear", .status = 0 },
|
|
||||||
{ .param = "Organization", .config = "services", .section = "", .text = "- Group services by provider or package\n- Separate by content type (sports, movies, kids, etc.)\n- Use comments to document service groups\n- Keep related services together in the file", .status = 0 },
|
|
||||||
{ .param = "Maintenance", .config = "services", .section = "", .text = "- Document which channels belong to each service\n- Update service definitions when channel lineups change\n- Remove obsolete service definitions\n- Test service restrictions after changes", .status = 0 },
|
|
||||||
{ .param = "Performance", .config = "services", .section = "", .text = "- Stay within the 64-service limit per reader\n- Combine related channels into single services when possible\n- Avoid overly granular service definitions\n- Balance between flexibility and simplicity", .status = 0 },
|
|
||||||
{ .param = "User", .config = "services", .section = "", .text = "- Verify the service is assigned to the user in oscam.user\n- Check that the service definition includes the correct CAID/ProvID/SrvID\n- Ensure service names match exactly (case-sensitive)\n- Verify the reader has access to the service", .status = 0 },
|
|
||||||
{ .param = "Service", .config = "services", .section = "", .text = "- Check for typos in service names\n- Verify hexadecimal values are correct\n- Ensure all required parameters are present\n- Check for duplicate service names", .status = 0 },
|
|
||||||
{ .param = "64-Service", .config = "services", .section = "", .text = "- Consolidate similar services\n- Remove unused service definitions\n- Use broader service definitions\n- Consider splitting across multiple readers", .status = 0 },
|
|
||||||
{ .param = "Parameters", .config = "srvid", .section = "", .text = "- **CAID**: One or more CAIDs in hexadecimal (max 10 per line)\n- **@PROVID**: Optional provider ID(s) in hexadecimal\n- **service ID**: Service ID (channel ID) in hexadecimal\n- **provider**: Provider or satellite position (optional)\n- **name**: Channel name (optional)\n- **type**: Channel type like TV, Radio, etc. (optional)\n- **description**: Additional description (optional)", .status = 0 },
|
|
||||||
{ .param = "Simple", .config = "srvid", .section = "", .text = "```\n0001,0002,0003:000a|my provider 1|tv name|tv|my tv package\n0004,0005,0006:000a|my provider 2|radio name 2|radio|my radio package\n0006:000b|my provider 3|tv name 3|\n```", .status = 0 },
|
|
||||||
{ .param = "CAID", .config = "srvid", .section = "", .text = "```\n# CAID 0100, all provider IDs, service ID 1111\n0100:1111:x|y|z|v\n```", .status = 0 },
|
|
||||||
{ .param = "CAID", .config = "srvid", .section = "", .text = "```\n# CAID 0100, provider ID 123456, service ID 1111\n0100@123456:1111:x|y|z|v\n```", .status = 0 },
|
|
||||||
{ .param = "CAID", .config = "srvid", .section = "", .text = "```\n# CAID 0100, all providers, service ID 1111\n0100@000000:1111:x|y|z|v\n```", .status = 0 },
|
|
||||||
{ .param = "Multiple", .config = "srvid", .section = "", .text = "```\n# CAID 0100 with provider 123456 AND CAID 0200 with provider 654321, both for service ID 1111\n0100@123456,0200@654321:1111:x|y|z|v\n```", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "srvid", .section = "", .text = "**Sky SAT:**\n\n```\n098C,098D,09F0:007F|Sky|13th Street|TV|Sky Starter Paket\n098C,098D,09F0:0085|Sky|Beate Uhse|TV|Sky Starter Paket\n098C,098D,09F0:0194|Sky|Cartoon Network|TV|Sky Starter Paket\n```\n\n**Sky Vodafone:**\n\n```\n098E,1838,1850,1854,1868:0074|Sky|Sky Cinema Action HD|TV|Sky Cinema Paket\n098E,1838,1850,1854,1868:006B|Sky|Sky Cinema Classics HD|TV|Sky Cinema Paket\n098E,1838,1850,1854,1868:008B|Sky|Sky Cinema Family HD|TV|Sky Cinema Paket\n```", .status = 0 },
|
|
||||||
{ .param = "HD", .config = "srvid", .section = "", .text = "```\n1830,1843,1860,186A,186D,09C4,098C,098D:EF10|Astra HD+|RTL HD|TV|\n1830,1843,1860,186A,186D,09C4,098C,098D:EF11|Astra HD+|VOX HD|TV|\n1830,1843,1860,186A,186D,09C4,098C,098D:EF74|Astra HD+|SAT.1 HD|TV|\n```", .status = 0 },
|
|
||||||
{ .param = "ORF", .config = "srvid", .section = "", .text = "```\n0D95,0D98,0648,0650,09C4,098C:132F|ORF Digital|ORF1 HD\n0D95,0D98,0648,0650,09C4,098C:1330|ORF Digital|ORF2 HD\n0D95,0D98,0648,0650,09C4,098C:33AC|ORF Digital|ATV HD\n```", .status = 0 },
|
|
||||||
{ .param = "Multicrypt", .config = "srvid", .section = "", .text = "For multicrypt channels, you can list all CAIDs used by the channel, including the management CAID 0000:\n\n```\n0000,1702,1837,1833,09C4,098C,0D05,0D95,0648,0D98,0650:0025|austriasat 19.2°E|AXN Action|TV|\n```\n\nThis prevents \"unknown program\" messages in the web interface and makes it easy to see all CAIDs used by a channel.", .status = 0 },
|
|
||||||
{ .param = "Finding", .config = "srvid", .section = "", .text = "Switch to the channel and check the OSCam logs:\n\n```\n2013/10/12 17:45:22 4DB510 c [DVBAPI] Receiver sends PMT command 3 for channel 0025\n2013/10/12 17:45:22 4DB510 c [ADD PID 0] CAID: 1702 ECM_PID: 1725 PROVID: 000000\n2013/10/12 17:45:22 4DB510 c [ADD PID 1] CAID: 1837 ECM_PID: 1FD1 PROVID: 000000\n2013/10/12 17:45:22 4DB510 c [ADD PID 2] CAID: 1833 ECM_PID: 1825 PROVID: 000000\n```\n\nUse these CAIDs in your oscam.srvid entry.", .status = 0 },
|
|
||||||
{ .param = "Free-to-Air", .config = "srvid", .section = "", .text = "For FTA channels, use CAID FFFE:\n\n```\nFFFE:2404|Freesat 28.2°E|Film4|TV|Movies|\n```\n\nNote: FTA CAID changed from 0000 to FFFE. Management CAID 0000 is reserved for multicrypt channels.", .status = 0 },
|
|
||||||
{ .param = "Finding", .config = "srvid", .section = "", .text = "1. Check OSCam logs for service ID information\n2. Use DVB analysis tools to scan channels\n3. Monitor ECM requests in OSCam logs\n4. Check the web interface status page\n5. Consult online channel databases", .status = 0 },
|
|
||||||
{ .param = "Extracting", .config = "srvid", .section = "", .text = "Look for lines like:\n```\n[DVBAPI] Receiver wants to demux srvid 0025 on adapter 0000\n```\n\nThe service ID is 0025 in this example.", .status = 0 },
|
|
||||||
{ .param = "Organization", .config = "srvid", .section = "", .text = "- Group channels by provider or satellite\n- Use comments to separate sections\n- Keep entries sorted by CAID and service ID\n- Document special entries", .status = 0 },
|
|
||||||
{ .param = "Naming", .config = "srvid", .section = "", .text = "- Use clear, descriptive channel names\n- Include satellite position in provider field\n- Specify channel type (TV, Radio, etc.)\n- Add useful descriptions", .status = 0 },
|
|
||||||
{ .param = "Maintenance", .config = "srvid", .section = "", .text = "- Update when channel lineups change\n- Remove obsolete channels\n- Add new channels as they appear\n- Keep synchronized with actual channel availability", .status = 0 },
|
|
||||||
{ .param = "Example", .config = "srvid", .section = "", .text = "```\n# Sky Germany SAT - 19.2E\n098C,098D,09F0:007F|Sky|13th Street|TV|Sky Starter Paket\n098C,098D,09F0:0085|Sky|Beate Uhse|TV|Sky Starter Paket\n\n# Sky Germany Vodafone - Cable\n098E,1838,1850,1854,1868:0074|Sky|Sky Cinema Action HD|TV|Sky Cinema Paket\n098E,1838,1850,1854,1868:006B|Sky|Sky Cinema Classics HD|TV|Sky Cinema Paket\n\n# HD+ - 19.2E\n1830,1843,1860,186A,186D,09C4,098C,098D:EF10|Astra HD+|RTL HD|TV|\n1830,1843,1860,186A,186D,09C4,098C,098D:EF11|Astra HD+|VOX HD|TV|\n\n# ORF Digital - 19.2E\n0D95,0D98,0648,0650,09C4,098C:132F|ORF Digital|ORF1 HD\n0D95,0D98,0648,0650,09C4,098C:1330|ORF Digital|ORF2 HD\n```", .status = 0 },
|
|
||||||
{ .param = "Channel", .config = "srvid", .section = "", .text = "- Verify file is named oscam.srvid\n- Check file is in correct configuration directory\n- Ensure Unix line endings (not Windows CRLF)\n- Verify CAID:ProvID:SrvID matches exactly\n- Restart OSCam after changes", .status = 0 },
|
|
||||||
{ .param = "Wrong", .config = "srvid", .section = "", .text = "- Check for duplicate entries\n- Verify provider ID priority rules\n- Ensure hexadecimal values are correct\n- Check for typos in CAID/ProvID/SrvID", .status = 0 },
|
|
||||||
{ .param = "Memory", .config = "srvid", .section = "", .text = "- Reduce file size by removing unused entries\n- Keep descriptions short\n- Remove unnecessary fields\n- Consider external service ID management", .status = 0 },
|
|
||||||
{ .param = "Parameters", .config = "guess", .section = "", .text = "- **length of ECM**: The length of the ECM message in hexadecimal format\n- **CAID**: The Conditional Access Identification number in hexadecimal format", .status = 0 },
|
|
||||||
{ .param = "BOMBA", .config = "guess", .section = "", .text = "The primary use case is with the BOMBA protocol, which does not transmit CAID information:\n\n```\n# BOMBA protocol CAID guessing\n10:0B00\n12:0D00\n14:0E00\n```", .status = 0 },
|
|
||||||
{ .param = "Legacy", .config = "guess", .section = "", .text = "Some older or proprietary protocols may also benefit from CAID guessing:\n- Custom card sharing protocols\n- Modified or stripped-down protocols\n- Legacy conditional access systems", .status = 0 },
|
|
||||||
{ .param = "P", .config = "dvbapi", .section = "", .text = "```\nP: [CAID]:[provider ID]:[service ID]:[ECM PID]:[CHID] [continue]\n```\nSets priority for specific CAIDs or providers. The optional `continue` parameter (value: 1) forces continuous retry attempts on the specified CAID, useful for Pay-Per-View services or card activation scenarios.", .status = 0 },
|
|
||||||
{ .param = "I", .config = "dvbapi", .section = "", .text = "```\nI: [CAID]:[provider ID]:[service ID]:[ECM PID]:[CHID]\n```\nIgnores specific encryption providers or Pay TV providers to prevent unnecessary ECM requests.", .status = 0 },
|
|
||||||
{ .param = "M", .config = "dvbapi", .section = "", .text = "```\nM: [CAID]:[provider ID]:[service ID]:[ECM PID] [target CAID]:[target provider ID]\n```\nMaps one CAID/provider to another, useful for redirecting requests (e.g., mapping Sky HD channels for S02 or D02 cards).", .status = 0 },
|
|
||||||
{ .param = "D", .config = "dvbapi", .section = "", .text = "```\nD: [CAID]:[provider ID]:[service ID]:[ECM PID] delay\n```\nAdds a delay in milliseconds before writing the control word, useful when the server responds too quickly.", .status = 0 },
|
|
||||||
{ .param = "L", .config = "dvbapi", .section = "", .text = "```\nL: [CAID]:[provider ID]:[service ID]:[ECM PID] ECM length (hexa)\n```\nFilters ECM requests to only allow specific ECM lengths (in hexadecimal), useful for filtering broken mappings.", .status = 0 },
|
|
||||||
{ .param = "X", .config = "dvbapi", .section = "", .text = "```\nX: [CAID]:[provider ID]:[service ID]:[ECM PID] demux\n```\nAdds decoding on an extra demux index on the same CA device (not supported on all set-top boxes).", .status = 0 },
|
|
||||||
{ .param = "J", .config = "dvbapi", .section = "", .text = "```\nJ: [CAID]:[provider ID]:[service ID]:[ECM PID] join\n```\nJoins a CAID/provider/ECM PID to another ECM PID.", .status = 0 },
|
|
||||||
{ .param = "A", .config = "dvbapi", .section = "", .text = "```\nA: ::[service ID]:[video PID]:[provider ID]::[ECM PID]\n```\nSets a dummy ECM request with CAID FFFF for services with constant control words (for STBs without PMT PID support only).", .status = 0 },
|
|
||||||
{ .param = "S", .config = "dvbapi", .section = "", .text = "```\nS: [device] [PMT file name]\n```\nSettings for DVB API device name and PMT file name (only valid for STAPI).", .status = 0 },
|
|
||||||
{ .param = "Priority", .config = "dvbapi", .section = "", .text = "```\nP: 0100:123456 # Prioritize CAID 0100 with provider 123456\nP: 0100 1 # Prioritize CAID 0100 with continuous retry (for PPV/card activation)\nP: : 1 # Client continues requesting after 3 failed attempts (all CAIDs)\nP: :1234 # Prioritize ECM with provider ID 1234 on all services\nP: 0200 # Prioritize CAID 0200\nP: 0300::9ABC # Prioritize CAID 0300 only on service 9ABC\nP: 1702 # Prioritize Sky S02\nP: 1830 # Prioritize HD+ HD01\nP: 0D95 # Prioritize ORF-ICE\n```", .status = 0 },
|
|
||||||
{ .param = "Ignore", .config = "dvbapi", .section = "", .text = "```\nI: :654321 # Ignore provider ID 654321 for all services\nI: 0 # Ignore all CAIDs not previously specified in this file\nI: 09C4 # Ignore Sky V13\n```", .status = 0 },
|
|
||||||
{ .param = "Mapping", .config = "dvbapi", .section = "", .text = "```\nM: 0400 0500:123456 # Map CAID 0400 to CAID 0500 with provider ID 123456\nM: 1834:000000:007E 1722 # Map CAID 1834 with provider 000000 and SID 007E to CAID 1722\n```", .status = 0 },
|
|
||||||
{ .param = "Delay", .config = "dvbapi", .section = "", .text = "```\nD: 0600 200 # Wait 200 ms before writing CW for CAID 0600\n```", .status = 0 },
|
|
||||||
{ .param = "ECM", .config = "dvbapi", .section = "", .text = "```\nL: 0700 8e # Only allow ECM length 8e (hex) for this CAID to filter broken mappings\n```", .status = 0 },
|
|
||||||
{ .param = "Multicrypt", .config = "dvbapi", .section = "", .text = "For channels with multiple encryption systems (e.g., Sky Germany with both Nagravision and NDS), prioritize the CAID matching your available cards to avoid unnecessary requests and speed up channel opening.", .status = 0 },
|
|
||||||
{ .param = "Pay-Per-View", .config = "dvbapi", .section = "", .text = "Use the `continue` parameter to keep retrying on a specific CAID until the card is activated:\n```\nP: 0100 1\n```", .status = 0 },
|
|
||||||
{ .param = "Server", .config = "dvbapi", .section = "", .text = "Ignore CAIDs for which you have no cards to prevent unnecessary server requests:\n```\nI: 09C4 # Ignore if you don't have V13 cards\n```", .status = 0 },
|
|
||||||
{ .param = "disabled", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\nAccount disabled.\n\n```ini\ndisabled = 0 # account enabled\ndisabled = 1 # account disabled\n```\n\n**Format:**\n```ini\ndisabled = 0|1\n```\n\n**Example:**\n```ini\ndisabled = 1\n```\n\n**Default:**\n```ini\ndisabled = 0\n```", .status = 0 },
|
{ .param = "disabled", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\nAccount disabled.\n\n```ini\ndisabled = 0 # account enabled\ndisabled = 1 # account disabled\n```\n\n**Format:**\n```ini\ndisabled = 0|1\n```\n\n**Example:**\n```ini\ndisabled = 1\n```\n\n**Default:**\n```ini\ndisabled = 0\n```", .status = 0 },
|
||||||
{ .param = "user", .config = "user", .section = "account", .text = "**🔴 Required parameter**\n\nAccount name.\n\n**Example:**\n```ini\nuser = user1\n```\n\n**Default:**\n```ini\nuser =\n```", .status = 0 },
|
{ .param = "user", .config = "user", .section = "account", .text = "**🔴 Required parameter**\n\nAccount name.\n\n**Example:**\n```ini\nuser = user1\n```\n\n**Default:**\n```ini\nuser =\n```", .status = 0 },
|
||||||
{ .param = "pwd", .config = "user", .section = "account", .text = "**🔴 Required parameter**\n\nPassword for account.\n\n⚠️ **Note:** Gbox Protocol: pwd is not required\n\n**Example:**\n```ini\npwd = pwuser1\n```\n\n**Default:**\n```ini\npwd =\n```", .status = 0 },
|
{ .param = "pwd", .config = "user", .section = "account", .text = "**🔴 Required parameter**\n\nPassword for account.\n\n⚠️ **Note:** Gbox Protocol: pwd is not required\n\n**Example:**\n```ini\npwd = pwuser1\n```\n\n**Default:**\n```ini\npwd =\n```", .status = 0 },
|
||||||
|
|
@ -419,179 +592,6 @@ static const struct wiki_entry wiki_entries[] = {
|
||||||
{ .param = "lb_nfb_readers", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of fallback readers for load balancing for this user.\n\n**Format:**\n```ini\nlb_nfb_readers = -1|count\n```\n\n**Example:**\n```ini\nlb_nfb_readers = 2\n```\n\n**Default:**\n```ini\nlb_nfb_readers = -1\n```\n\n`-1` = use global lb_nfb_readers in oscam.conf", .status = 0 },
|
{ .param = "lb_nfb_readers", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of fallback readers for load balancing for this user.\n\n**Format:**\n```ini\nlb_nfb_readers = -1|count\n```\n\n**Example:**\n```ini\nlb_nfb_readers = 2\n```\n\n**Default:**\n```ini\nlb_nfb_readers = -1\n```\n\n`-1` = use global lb_nfb_readers in oscam.conf", .status = 0 },
|
||||||
{ .param = "lb_nbest_percaid", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of best readers per CAIDs for load balancing, wildcards CAIDs with two-digit CAIDs possible.\n\n**Example:**\n```ini\nlb_nbest_percaid = 0100:4,0200:3,03:2,04:1 # wildcards CAIDs 03xx and 04xx\n```\n\n**Default:** none", .status = 0 },
|
{ .param = "lb_nbest_percaid", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of best readers per CAIDs for load balancing, wildcards CAIDs with two-digit CAIDs possible.\n\n**Example:**\n```ini\nlb_nbest_percaid = 0100:4,0200:3,03:2,04:1 # wildcards CAIDs 03xx and 04xx\n```\n\n**Default:** none", .status = 0 },
|
||||||
{ .param = "cwc_disable", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\nDisable CW cycle check for this user.\n\n```ini\ncwc_disable = 0 # default\ncwc_disable = 1 # disable cw cycle check\n```\n\n**Format:**\n```ini\ncwc_disable = 0|1\n```\n\n**Example:**\n```ini\ncwc_disable = 1\n```\n\n**Default:**\n```ini\ncwc_disable = 0\n```", .status = 0 },
|
{ .param = "cwc_disable", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\nDisable CW cycle check for this user.\n\n```ini\ncwc_disable = 0 # default\ncwc_disable = 1 # disable cw cycle check\n```\n\n**Format:**\n```ini\ncwc_disable = 0|1\n```\n\n**Example:**\n```ini\ncwc_disable = 1\n```\n\n**Default:**\n```ini\ncwc_disable = 0\n```", .status = 0 },
|
||||||
{ .param = "Syntax", .config = "tiers", .section = "", .text = "```\nCAID[,CAID]...:TIER_ID|description\n```", .status = 0 },
|
|
||||||
{ .param = "Format", .config = "tiers", .section = "", .text = "- **CAID**: Conditional Access ID (4-digit hexadecimal), multiple CAIDs can be specified separated by commas\n- **TIER_ID**: Tier/Channel ID (4-digit hexadecimal)\n- **description**: Human-readable description of the tier/service package\n- **:** Separator between CAID list and TIER_ID\n- **|** Separator between TIER_ID and description", .status = 0 },
|
|
||||||
{ .param = "Important", .config = "tiers", .section = "", .text = "- Use Unix text file format only (LF line endings, not CRLF)\n- Comments start with `#`\n- Multiple CAIDs can share the same TIER_ID\n- Entries should be sorted by TIER_ID within each card/provider section", .status = 0 },
|
|
||||||
{ .param = "Basic", .config = "tiers", .section = "", .text = "```\n0001,0002,0003:000a|my TIER 1\n0004:000b|my TIER 2\n0005:000b|my TIER 3\n```", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "tiers", .section = "", .text = "```\n09C4,09C7:0046|HDplus [NDS]\n09C4,09C7:007D|Sky Sport [NDS]\n09C4,09C7:0081|Sky Bundesliga [NDS]\n09C4,09C7:008E|Beate Uhse [NDS]\n09C4,09C7:00C7|Sky Welt [NDS]\n09C4,09C7:00C8|Sky Film [NDS]\n09C4,09C7:00C9|Sky Welt HD [NDS]\n09C4,09C7:00CA|Sky Film HD [NDS]\n09C4,09C7:00CB|Sky Sport HD [NDS]\n```", .status = 0 },
|
|
||||||
{ .param = "Sky", .config = "tiers", .section = "", .text = "```\n1702,1833,1722,1834:000F|Sky Sport Portal\n1702,1833,1722,1834:00F0|Sky Bundesliga\n1702,1833,1722,1834:026C|Sky Welt Extra 1\n1702,1833,1722,1834:05E7|Blue Movie Portal\n1702,1833,1722,1834:05F1|Sky Welt HD\n1702,1833,1722,1834:0614|Sky Sport News [SD/HD]\n1702,1833,1722,1834:7D21|Sky Welt\n1702,1833,1722,1834:7D22|Sky Film\n1702,1833,1722,1834:7D23|Sky Sport\n```", .status = 0 },
|
|
||||||
{ .param = "HD", .config = "tiers", .section = "", .text = "```\n# HDplus HD01 [Nagra]\n1830:0064|Gratis Jahr\n1830:0065|Ungenutzt\n1830:0BEA|HDplus Paket\n\n# HDplus HD02 [Nagra]\n1843:0066|HDplus Paket [Nagra HD02]\n1843:0067|HDplus Paket [Nagra HD02]\n1843:0BEA|HDplus Paket [Nagra HD02]\n```", .status = 0 },
|
|
||||||
{ .param = "ORF-ICE", .config = "tiers", .section = "", .text = "```\n# Provider 1\n0648:0001|ORF\n0648:0002|ATV / Private\n0648:000D|ORF-ICE Irdeto-Mode Unknown\n0648:F000|ORF-ICE Irdeto-Mode Unknown\n\n# Provider 2\n0648:0015|ORF-ICE Irdeto-Mode Unknown\n```", .status = 0 },
|
|
||||||
{ .param = "ORF", .config = "tiers", .section = "", .text = "```\n0D05,0D95:0001|ORF All\n0D05,0D95:0010|ATV\n```", .status = 0 },
|
|
||||||
{ .param = "Understanding", .config = "tiers", .section = "", .text = "TIERs (or CHIDs) are identifiers used by conditional access systems to define which services or channels a subscriber has access to. Each smartcard contains entitlements that specify which TIERs are active.", .status = 0 },
|
|
||||||
{ .param = "TIER", .config = "tiers", .section = "", .text = "To determine the TIERs available on an NDS card:\n\n1. Set OSCam debug level to 4\n2. Check bytes 11 and 12 in the line below \"Decrypted (Payload)\" in the log\n3. Use this command to extract TIER IDs:\n\n```bash\ngrep -ia -A1 'Decrypted' /tmp/oscam.log | tail -n 1 | sed 's/ */ /g' | cut -d \" \" -f16,17 | sed 's/ //g'\n```", .status = 0 },
|
|
||||||
{ .param = "WebIF", .config = "tiers", .section = "", .text = "Starting with OSCam 1.20-unstable r5920:\n- If no TIER/CHID assignments are found in `oscam.tiers`\n- OSCam will display CAID/Provider assignments from `oscam.provid` in the WebIF (if available)\n- This provides fallback information when tier definitions are not configured", .status = 0 },
|
|
||||||
{ .param = "Organizing", .config = "tiers", .section = "", .text = "1. **Group by Provider**: Keep all entries for the same provider together\n2. **Add Comments**: Use comments to identify provider and card type\n3. **Sort by TIER_ID**: Within each provider section, sort entries by TIER_ID (ascending)\n4. **Include Date**: Add a date comment when updating the file", .status = 0 },
|
|
||||||
{ .param = "Example", .config = "tiers", .section = "", .text = "```\n# oscam.tiers\n# Last updated: 2024-01-15\n# Source: http://www.streamboard.tv/wiki/Tiers\n\n# ============================================\n# Sky Germany V13/G02/G09 [NDS]\n# ============================================\n09C4,09C7:0046|HDplus [NDS]\n09C4,09C7:007D|Sky Sport [NDS]\n# ... more entries ...\n\n# ============================================\n# HD+ [Nagra]\n# ============================================\n1830,1843:0064|HD+ Gratisjahr (HD01)\n1830,1843:0BEA|Jahresabo HD+\n# ... more entries ...\n```", .status = 0 },
|
|
||||||
{ .param = "Maintaining", .config = "tiers", .section = "", .text = "- TIERs can change when providers update their systems\n- Keep your `oscam.tiers` file updated with current information\n- Community resources like the Streamboard Wiki maintain updated TIER lists\n- Test your configuration after updates to ensure correct display in WebIF", .status = 0 },
|
|
||||||
{ .param = "Supported", .config = "tiers", .section = "", .text = "The `oscam.tiers` file commonly includes definitions for:\n\n- **Sky Germany**: NDS (09C4, 09C7) and Nagra (1702, 1833, 1722, 1834) systems\n- **HD+**: Nagra systems (1830, 1843)\n- **ORF**: Irdeto (0648, 0650) and CryptoWorks (0D05, 0D95) systems\n- **Unity Media**: Nagra systems (1722, 1831, 1835, 1838)\n- **MTV Unlimited**: Conax systems (0B00)", .status = 0 },
|
|
||||||
{ .param = "CAID", .config = "tiers", .section = "", .text = "Common CAIDs used in tier definitions:\n\n- **09C4, 09C7, 098C**: NDS (VideoGuard) - Sky Germany\n- **1702, 1722, 1833, 1834**: Nagra - Sky Germany\n- **1830, 1843**: Nagra - HD+\n- **0648, 0650**: Irdeto - ORF\n- **0D05, 0D95, 0D98**: CryptoWorks - ORF\n- **0B00**: Conax - MTV Unlimited", .status = 0 },
|
|
||||||
{ .param = "TIERs", .config = "tiers", .section = "", .text = "1. **Check File Format**: Ensure Unix line endings (LF, not CRLF)\n2. **Verify Syntax**: Check for correct format with colons and pipes\n3. **Match CAIDs**: Ensure CAIDs in the file match your card's CAID\n4. **Check Permissions**: Verify OSCam can read the file\n5. **Restart OSCam**: Changes require OSCam restart to take effect", .status = 0 },
|
|
||||||
{ .param = "Finding", .config = "tiers", .section = "", .text = "If you need to identify unknown TIER IDs:\n\n1. Enable debug logging in OSCam (set debug level to 4)\n2. Monitor the log file during card initialization\n3. Look for \"Decrypted (Payload)\" entries\n4. Extract bytes 11-12 for the TIER ID\n5. Add the new TIER to your configuration file", .status = 0 },
|
|
||||||
{ .param = "Incorrect", .config = "tiers", .section = "", .text = "- Verify TIER_ID matches the actual service\n- Check for typos in hexadecimal values\n- Consult community resources for accurate descriptions\n- Update from maintained TIER lists", .status = 0 },
|
|
||||||
{ .param = "label", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nName for reader.\n\n**Format:**\n```ini\nlabel = name\n```\n\n**Example:**\n```ini\nlabel = easymouse2\n```", .status = 0 },
|
|
||||||
{ .param = "description", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` compilation flag)**\n\nDescription of reader (text).\n\n**Format:**\n```ini\ndescription = text\n```\n\n**Example:**\n```ini\ndescription = My main card reader\n```\n\n**Default:**\n```ini\ndescription =\n```", .status = 0 },
|
|
||||||
{ .param = "enable", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDeactivate reader.\n\n```ini\nenable = 0 # off\nenable = 1 # on (default)\n```\n\n**Format:**\n```ini\nenable = 0|1\n```\n\n**Example:**\n```ini\nenable = 0\n```\n\n**Default:**\n```ini\nenable = 1\n```", .status = 0 },
|
|
||||||
{ .param = "protocol", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nReader protocol.\n\n**Values:**\n```ini\nprotocol = mouse # Local cardreader\n = internal # All cardreader with \"device=/dev/sciX\", and internal Coolstream-Reader\n = camd35 # Cascading - camd 3.5-compatible remote server - UDP\n = cs357x # Cascading - camd 3.5-compatible remote server - UDP\n = mp35\n = smartreader\n = serial\n = cs378x # Camd 3.5-compatible remote server - TCP\n = gbox\n = newcamd # newcamd protocol\n = newcamd525\n = newcamd524\n = cccam\n = radegast\n = pcsc\n = constcw\n = sc8in1\n = smargo\n```", .status = 0 },
|
|
||||||
{ .param = "device", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nDefine local or remote reader.\n\n**Syntax:**\n```ini\ndevice = [<readertype>;]serial:serialnum|bus:device|<device|device:slot>|<ip|hostname>,<port>[,<lport>]|pcsc|<0|1>|constantcw\n```\n\n**Reader Types:**\n- `SR:` Smartreader+ (default)\n- `SRv2:` Smartreader V2\n- `Infinity:` Infinity USB\n- `TripleP1:` Smargo Triple Reader port 1\n- `TripleP2:` Smargo Triple Reader port 2\n- `TripleP3:` Smargo Triple Reader port 3\n\n**Device Formats:**\n- `bus:device` - Bus name and device name of the smartreader+ (get the name with lsusb 'Bus' and 'Device')\n- `serialnum` - Serial number of Smartreader+ or Infinity USB (get the serial number while starting OSCam)\n- `device` - Device name\n- `device:slot` - Device name and slot number sc8in1 (1-8), only one sc8in1 reader supported\n- `ip|hostname` - IP address or host name\n- `port` - TCP/IP port\n- `lport` - Remapping to local TCP/IP port\n- `PCSC` - Number of PCSC reader, starting with 0. Alternative: select via reader name (part), e.g., \"-1:SCR 3310\" (names of detected readers are shown by \"oscam -d 32\")\n- `0|1` - **For Coolstream HD-1 STB only:** select reader 0 or reader 1\n- `constantcw` - Constant CW file name\n\n**CW File Format:**\n\n*Standard:*\n```\nCAID:Provider ID:Service ID:PMT ID:ECM PID::key (16 Bytes separated by spaces)\n```\nExample:\n```\n1234:123456:1234:2345:3456::00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n```\n\n*Extended OSCam-Format:*\n```\nCAID:Provider ID:Service ID:PMT ID:ECM PID:Video PID:key (16 Bytes separated by spaces)\n```\nExample:\n```\n1234:123456:1234:2345:3456:7890:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n```\n\n**Examples:**\n```ini\ndevice = /dev/ttyS0 # Reader on COM1 (Linux i386 and Windows)\ndevice = /dev/tts/1 # Reader on COM2 (Linux dbox2 with multicam)\ndevice = /dev/ttyUSB0 # Reader on USB (Linux i386)\ndevice = /dev/ttyUSB0:1 # Slot 1 SC8in1 or MCR 4/8 (Linux i386)\n```\n\n⚠️ **Attention:** Counting begins with 0, that means number of device is one less than number of COM-Port! E.g., ttyS0 = COM1, tts/1 = COM2.", .status = 0 },
|
|
||||||
{ .param = "ipv4force", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForce IPv4 connection for this reader even when IPv6 is available.\n\n```ini\nipv4force = 0 # use IPv6 if available (default)\nipv4force = 1 # force IPv4 only\n```\n\n**Format:**\n```ini\nipv4force = 0|1\n```\n\n**Example:**\n```ini\nipv4force = 1\n```\n\n**Default:**\n```ini\nipv4force = 0\n```", .status = 0 },
|
|
||||||
{ .param = "key", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nKey for newcamd remote reader encryption.\n\n**Format:**\n```ini\nkey = 14_hex_bytes\n```\n\n**Example:**\n```ini\nkey = 0102030405060708091011121314\n```\n\n**Default:**\n```ini\nkey =\n```", .status = 0 },
|
|
||||||
{ .param = "user", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUser for remote reader (name).\n\n**Format:**\n```ini\nuser = username\n```\n\n**Example:**\n```ini\nuser = username\n```\n\n**Default:**\n```ini\nuser =\n```", .status = 0 },
|
|
||||||
{ .param = "password", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPassword for remote reader.\n\n**Format:**\n```ini\npassword = secret\n```\n\n**Example:**\n```ini\npassword = secret\n```\n\n**Default:**\n```ini\npassword =\n```", .status = 0 },
|
|
||||||
{ .param = "pincode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPincode for **Conax, Cryptoworks and Viaccess** SCs.\n\n**Example:**\n```ini\npincode = 1234\n```\n\n**Default:**\n```ini\npincode =\n```", .status = 0 },
|
|
||||||
{ .param = "readnano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nWrite file (usually a copy of a file saved by `savenano`) to your smartcard. If no path is specified, the specified file is searched for in the configuration directory. Only valid for physical readers!\n\n**Examples:**\n```ini\nreadnano = write.emm\n = /var/oscam/write.emm\n = # Blank (default)\n```", .status = 0 },
|
|
||||||
{ .param = "services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n⚠️ **Attention:** If loadbalancing is enabled in `oscam.conf [global]` among `lb_mode`, then there may be **no entries**!\n\n⚠️ **Attention:** The number of services that will be considered based reader, is limited to 64, or 64 times [service-name][CAID][provid][srvid]!\n\nAssignment to service group. This requires an `oscam.services` file to be present.\n\n**Logic (in this order):**\n1. If the field is empty (or invalid), the request is allowed.\n2. When a negative service (i.e., those with \"!\") is applicable, the request is rejected.\n3. If a positive service is applicable or there is no positive service, the request is allowed.\n4. If none of the previous points, the request is rejected.\n\nThis means that negative services are only necessary in individual cases - when services has positive entries, but you want to exclude some. This is not recommended, because misconfiguration can occur easily. Instead, create an additional service that contains all the relevant channels.\n\n**Syntax:**\n```ini\nservices = [!]service[,[!]service]...\n = # Blank (default)\n```", .status = 0 },
|
|
||||||
{ .param = "lb_whitelist_services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReader assignment to service group for channels which may never be blocked by the loadbalancer to the reader.\n\n**Syntax:**\n```ini\nlb_whitelist_services = <services>,<services>...\n```\n\n**Default:**\n```ini\nlb_whitelist_services =\n```", .status = 0 },
|
|
||||||
{ .param = "inactivitytimeout", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nInactivity timeout in seconds.\n\n```ini\ninactivitytimeout = -1 # Reconnect on network failure for newcamd based readers, even in idle\ninactivitytimeout = 0 # Default\n```\n\n**Format:**\n```ini\ninactivitytimeout = -1|0|seconds\n```\n\n**Example:**\n```ini\ninactivitytimeout = 300\n```\n\n**Default:**\n```ini\ninactivitytimeout = 0\n```", .status = 0 },
|
|
||||||
{ .param = "reconnecttimeout", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReconnect from a remote reader, if missing answers in seconds.\n\n**Format:**\n```ini\nreconnecttimeout = seconds\n```\n\n**Example:**\n```ini\nreconnecttimeout = 20\n```\n\n**Default:**\n```ini\nreconnecttimeout =\n```", .status = 0 },
|
|
||||||
{ .param = "reconnectdelay", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDelay in milliseconds before reconnecting to the remote server after a connection loss.\n\n**Format:**\n```ini\nreconnectdelay = milliseconds\n```\n\n**Example:**\n```ini\nreconnectdelay = 30000\n```\n\n**Default:**\n```ini\nreconnectdelay = 60000\n```", .status = 0 },
|
|
||||||
{ .param = "resetcycle", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of ECMs until SC reset is performed.\n\n⚠️ **Hint:** Valid for physical readers only!\n\n**Format:**\n```ini\nresetcycle = count\n```\n\n**Example:**\n```ini\nresetcycle = 5\n```\n\n**Default:**\n```ini\nresetcycle = 0\n```", .status = 0 },
|
|
||||||
{ .param = "disableserverfilter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nIgnore CAID and ident settings of reader due to faulty clients.\n\n```ini\ndisableserverfilter = 0 # Not ignore (default)\ndisableserverfilter = 1 # Ignore\n```\n\n**Format:**\n```ini\ndisableserverfilter = 0|1\n```\n\n**Example:**\n```ini\ndisableserverfilter = 1\n```\n\n**Default:**\n```ini\ndisableserverfilter = 0\n```", .status = 0 },
|
|
||||||
{ .param = "connectoninit", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAllow newcamd connections to be established on startup although there isn't a request yet.\n\n```ini\nconnectoninit = 0 # Default\nconnectoninit = 1 # Allow connection on init\n```\n\n**Format:**\n```ini\nconnectoninit = 0|1\n```\n\n**Example:**\n```ini\nconnectoninit = 1\n```\n\n**Default:**\n```ini\nconnectoninit = 0\n```", .status = 0 },
|
|
||||||
{ .param = "keepalive", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nKeep connection alive.\n\n```ini\nkeepalive = 0 # Always on if cacheex reader type (default)\nkeepalive = 1 # Allow cs378x TCP socket to be always connected\n```\n\n**Format:**\n```ini\nkeepalive = 0|1\n```\n\n**Example:**\n```ini\nkeepalive = 1\n```\n\n**Default:**\n```ini\nkeepalive = 0\n```", .status = 0 },
|
|
||||||
{ .param = "smargopatch", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable workaround for smartreader+ and reader until native mode works.\n\n```ini\nsmargopatch = 0 # Disabled (default)\nsmargopatch = 1 # Enabled\n```\n\n**Format:**\n```ini\nsmargopatch = 0|1\n```\n\n**Example:**\n```ini\nsmargopatch = 1\n```\n\n**Default:**\n```ini\nsmargopatch = 0\n```", .status = 0 },
|
|
||||||
{ .param = "autospeed", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAuto speed detection.\n\n```ini\nautospeed = 0 # Disabled\nautospeed = 1 # Enabled (default) - Sets mhz according to ATR\n```\n\nCurrently only used for smartreader, smargo protocol and Dreambox-readers internal protocol. Other readers will be adapted to use this parameter as well.\n\nIf you want to overclock your card, set autospeed to 0.\n\n**Format:**\n```ini\nautospeed = 0|1\n```\n\n**Example:**\n```ini\nautospeed = 0\n```\n\n**Default:**\n```ini\nautospeed = 1\n```", .status = 0 },
|
|
||||||
{ .param = "sc8in1_dtrrts_patch", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable fix for SC8in1/MCR DTR/RTS kernel bug.\n\n```ini\nsc8in1_dtrrts_patch = 0 # Disabled (default)\nsc8in1_dtrrts_patch = 1 # Enabled\n```\n\n**Format:**\n```ini\nsc8in1_dtrrts_patch = 0|1\n```\n\n**Example:**\n```ini\nsc8in1_dtrrts_patch = 1\n```\n\n**Default:**\n```ini\nsc8in1_dtrrts_patch = 0\n```", .status = 0 },
|
|
||||||
{ .param = "fallback", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine reader as fallback. Standard and fallback reader must have the same group (see **group** parameter)!\n\n```ini\nfallback = 0 # No fallback reader (default)\nfallback = 1 # Fallback reader\n```\n\n**Format:**\n```ini\nfallback = 0|1\n```\n\n**Example:**\n```ini\nfallback = 1\n```\n\n**Default:**\n```ini\nfallback = 0\n```", .status = 0 },
|
|
||||||
{ .param = "fallback_percaid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUse reader as fallback for defined CAIDs only. Two digit wildcards CAIDs are possible. `fallback_percaid` overrules `fallback`.\n\n**Syntax:**\n```ini\nfallback_percaid = <CAID>[:<ident>[,ident]]...[;<CAID>[:<ident>[,ident]]...]...\n```\n\n**Example:**\n```ini\nfallback_percaid = 1234:234567;10:345678\n```\n\n**Default:**\n```ini\nfallback_percaid =\n```", .status = 0 },
|
|
||||||
{ .param = "localcards", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUse this reader (for defined CAIDs only) as \"local\" in LB/reader selection. It will be handled as a local reader per LB and preferlocalcards settings. In this way, we can consider a network reader as local, like we had a cardreader.\n\n**Syntax:**\n```ini\nlocalcards = <CAID>[:<ident>[,ident]]...[;<CAID>[:<ident>[,ident]]...]...\n```", .status = 0 },
|
|
||||||
{ .param = "disablecrccws_only_for", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**Syntax:**\n```ini\ndisablecrccws_only_for = CAID:PROVID;CAID:PROVID\n```\n\n**Example:**\n```ini\ndisablecrccws_only_for = 0500:032830;098C:000000\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nEnable cache exchange mode for camd 3.5x and CCcam protocol.\n\n```ini\ncacheex = 0 # Disabled (default)\ncacheex = 1 # Enable cache exchange pull mode\ncacheex = 2 # Enable cache exchange push mode\ncacheex = 3 # Enable cache exchange reverse push mode\n```\n\n📋 See also on `oscam.user`!\n\n⚠️ Identical cache exchange modes must be set on local OSCam server and remote OSCam user account!\n\n**Format:**\n```ini\ncacheex = 0|1|2|3\n```\n\n**Example:**\n```ini\ncacheex = 2\n```\n\n**Default:**\n```ini\ncacheex = 0\n```\n\n#### cacheex modes\n\n#### cacheex = 1 - cachepull\n\n**Situation:**\n- OSCam A reader1 has `cacheex = 1`\n- OSCam B account1 has `cacheex = 1`\n\nOSCam A gets an ECM request, reader1 sends this request to OSCam B.\n\nOSCam B checks his cache:\n- Not found in cache: return NOK\n- Found in cache: return OK+CW\n- Not found in cache, but found pending request: wait `cacheexwaittime` in `oscam.conf [global]` and check again. OSCam B never requests new EMMs.\n\n**CW-flow:** B → A\n\n#### cacheex = 2 - cachepush\n\n**Situation:**\n- OSCam A reader1 has `cacheex = 2`\n- OSCam B account1 has `cacheex = 2`\n\nIf OSCam B gets a CW, it's pushed to OSCam A. Reader has normal functionality and can request ECMs.\n\n- Problem: OSCam can only push CWs if OSCam A is connected\n- Problem or feature?: OSCam A reader can request ECMs from OSCam B\n\n**CW-flow:** B → A\n\n#### cacheex = 3 - reversecachepush\n\n**Situation:**\n- OSCam A reader1 has `cacheex = 3`\n\nIf OSCam A gets a CW, it's pushed to OSCam B. OSCam A never requests new ECMs.\n\n**CW-flow:** A → B", .status = 0 },
|
|
||||||
{ .param = "cacheex_maxhop", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nDefine maximum hops for cache exchange.\n\n**Format:**\n```ini\ncacheex_maxhop = hops\n```\n\n**Example:**\n```ini\ncacheex_maxhop = 5\n```\n\n**Default:**\n```ini\ncacheex_maxhop = 10\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_maxhop_lg", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDefine a maxhop for lg-flagged CWs for push/receive, to allow a higher maxhop than for non-flagged CWs.\n\n```ini\ncacheex_maxhop_lg = 0 # Use value of cacheex_maxhop (default)\ncacheex_maxhop_lg = 1 to 10 # Set maxhop (if value is lower than cacheex_maxhop, value of cacheex_maxhop is used)\n```\n\n**Format:**\n```ini\ncacheex_maxhop_lg = 0-10\n```\n\n**Example:**\n```ini\ncacheex_maxhop_lg = 5\n```\n\n**Default:**\n```ini\ncacheex_maxhop_lg = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_ecm_filter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nCacheEx ECM filter for this reader. Defines which CAIDs/providers/services are allowed for cache exchange.\n\n**Format:**\n```ini\ncacheex_ecm_filter = [caid][&mask][@provid][$servid],n\n```\n\n**Example:**\n```ini\ncacheex_ecm_filter = 1234@000001,1234@000002\n```\n\n**Default:**\n```ini\ncacheex_ecm_filter =\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_allow_request", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nAllow ECM requests from this CacheEx reader.\n\n```ini\ncacheex_allow_request = 0 # ECM requests disabled (default)\ncacheex_allow_request = 1 # ECM requests allowed\n```\n\n**Format:**\n```ini\ncacheex_allow_request = 0|1\n```\n\n**Example:**\n```ini\ncacheex_allow_request = 1\n```\n\n**Default:**\n```ini\ncacheex_allow_request = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_drop_csp", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nDrop CWs received via CSP (Cardservproxy protocol) for this reader.\n\n```ini\ncacheex_drop_csp = 0 # accept CSP CWs (default)\ncacheex_drop_csp = 1 # drop CSP CWs\n```\n\n**Format:**\n```ini\ncacheex_drop_csp = 0|1\n```\n\n**Example:**\n```ini\ncacheex_drop_csp = 1\n```\n\n**Default:**\n```ini\ncacheex_drop_csp = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_allow_filter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nAllow this reader to set CacheEx ECM filters remotely.\n\n```ini\ncacheex_allow_filter = 0 # remote filter setting disabled\ncacheex_allow_filter = 1 # remote filter setting allowed (default)\n```\n\n**Format:**\n```ini\ncacheex_allow_filter = 0|1\n```\n\n**Example:**\n```ini\ncacheex_allow_filter = 0\n```\n\n**Default:**\n```ini\ncacheex_allow_filter = 1\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_allow_maxhop", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nSet maxhop settings remotely, if remote reader/user has `cacheex_allow_maxhop = 1`.\n\n```ini\ncacheex_allow_maxhop = 0 # Opt-in (default)\ncacheex_allow_maxhop = 1 # Allow\n```\n\n**Format:**\n```ini\ncacheex_allow_maxhop = 0|1\n```\n\n**Example:**\n```ini\ncacheex_allow_maxhop = 1\n```\n\n**Default:**\n```ini\ncacheex_allow_maxhop = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_block_fakecws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX` compilation flag)**\n\nBlock fake CWs for this reader.\n\n```ini\ncacheex_block_fakecws = 0 # allow all CWs (default)\ncacheex_block_fakecws = 1 # block fake CWs\n```\n\n**Format:**\n```ini\ncacheex_block_fakecws = 0|1\n```\n\n**Example:**\n```ini\ncacheex_block_fakecws = 1\n```\n\n**Default:**\n```ini\ncacheex_block_fakecws = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_cw_check_for_push", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nPush only when `cacheex_cw_check` counter reached. Localgenerated-flagged CWs are always pushed out.\n\n```ini\ncacheex_cw_check_for_push = 0 # Opt-in (default)\ncacheex_cw_check_for_push = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_cw_check_for_push = 0|1\n```\n\n**Example:**\n```ini\ncacheex_cw_check_for_push = 1\n```\n\n**Default:**\n```ini\ncacheex_cw_check_for_push = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_lg_only_remote_settings", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nPossibility to deny cacheex-receiver/client (cx2: user / cx3: reader) to overwrite the following settings at cacheex-sending-instance:\n- `cacheex_localgenerated_only`\n- `cacheex_lg_only_tab`\n\nIt makes sense if you want to force your local settings. If the user/reader isn't allowed to overwrite your values:\n- It is still possible for the cacheex-receiver to set `cacheex_localgenerated_only=1`, if the user/reader defines `cacheex_localgenerated_only_in=1`; but it is only at cacheex-sending-instance possible to disable it\n- It is still possible for the cacheex-receiver to add `cacheex_lg_only_tab`, if the user/reader defines `cacheex_lg_only_in_tab=1234,1337`; but it is only merged to the sender-instance `cacheex_lg_only_tab` values\n\nIf `cacheex_lg_only_remote_settings` in `oscam.conf` is enabled, the user/reader-settings are ignored.\n\n```ini\ncacheex_lg_only_remote_settings = 0 # Opt-out (default)\ncacheex_lg_only_remote_settings = 1 # Deny remote overwrite\n```\n\n**Format:**\n```ini\ncacheex_lg_only_remote_settings = 0|1\n```\n\n**Example:**\n```ini\ncacheex_lg_only_remote_settings = 1\n```\n\n**Default:**\n```ini\ncacheex_lg_only_remote_settings = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_localgenerated_only", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForward only CWs which are flagged as localgenerated.\n\n```ini\ncacheex_localgenerated_only = 0 # Opt-in (default)\ncacheex_localgenerated_only = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_localgenerated_only = 0|1\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only = 1\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_localgenerated_only_caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nCAID table for localgenerated-only filter. Deprecated: use cacheex_lg_only_tab instead.\n\n**Format:**\n```ini\ncacheex_localgenerated_only_caid = CAID1[,CAID2]...\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only_caid = 0100,0500,1702\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only_caid =\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_lg_only_tab", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nForward only CWs which are lg-flagged for this list of caid/provid(s).\n\nIf provid FFFFFE is set, all provids for this caid are valid!\n\n**Syntax:**\n```ini\ncacheex_lg_only_tab = caid1:provid1[,provid2];caid2:provid1;\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_lg_only_in_aio_only", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nUse drop lg-only settings (`cacheex_localgenerated_only_in` & `cacheex_lg_only_in_tab`) only if peer is detected as cx-aio-patched or svn >= 11588.\n\n```ini\ncacheex_lg_only_in_aio_only = 0 # Opt-in (default)\ncacheex_lg_only_in_aio_only = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_lg_only_in_aio_only = 0|1\n```\n\n**Example:**\n```ini\ncacheex_lg_only_in_aio_only = 1\n```\n\n**Default:**\n```ini\ncacheex_lg_only_in_aio_only = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_localgenerated_only_in", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDrop incoming CWs which are NOT flagged as localgenerated.\n\n```ini\ncacheex_localgenerated_only_in = 0 # Opt-in (default)\ncacheex_localgenerated_only_in = 1 # Enable\n```\n\n**Format:**\n```ini\ncacheex_localgenerated_only_in = 0|1\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only_in = 1\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only_in = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_localgenerated_only_in_caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nCAID table for incoming localgenerated-only filter. Deprecated: use cacheex_lg_only_in_tab instead.\n\n**Format:**\n```ini\ncacheex_localgenerated_only_in_caid = CAID1[,CAID2]...\n```\n\n**Example:**\n```ini\ncacheex_localgenerated_only_in_caid = 0100,0500,1702\n```\n\n**Default:**\n```ini\ncacheex_localgenerated_only_in_caid =\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_lg_only_in_tab", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nAllow incoming CWs only if they are lg-flagged for this list of caid/provid(s).\n\nIf provid FFFFFE is set, all provids for this caid are valid!\n\n**Syntax:**\n```ini\ncacheex_lg_only_in_tab = caid1:provid1[,provid2];caid2:provid1;\n```", .status = 0 },
|
|
||||||
{ .param = "cacheex_nopushafter", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDon't forward CWs from local/proxy-reader via CacheEx, if the defined time_in_ms for the CAID is reached.\n\n**Syntax:**\n```ini\ncacheex_nopushafter = CAID:time_in_ms[,n]\n```", .status = 0 },
|
|
||||||
{ .param = "caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine and mapping of CAIDs for reader.\n\n**Syntax:**\n```ini\ncaid = <CAID>[&<mask>][:<target CAID>][,<CAID>[&<mask>][:<target CAID>]]...\n```\n\n**Examples:**\n```ini\ncaid = 0100\ncaid = 0200&ffee:0300\ncaid = 0400&ff00:0500,0600\ncaid = 0702,0722\ncaid = 0702&ffdf # Shortcut for the example above\n```\n\n**Default:** All CAIDs with mask FFFF", .status = 0 },
|
|
||||||
{ .param = "atr", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet a custom ATR (Answer To Reset) for the reader. Override the automatic ATR detection.\n\n**Format:**\n```ini\natr = hex_bytes\n```\n\n**Example:**\n```ini\natr = 3B9F21E49067534C000000280F28000069FF6500\n```\n\n**Default:**\n```ini\natr =\n```", .status = 0 },
|
|
||||||
{ .param = "boxid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNDS receiver box ID.\n\n**Example:**\n```ini\nboxid = 12345678\n```\n\n**Default:**\n```ini\nboxid =\n```", .status = 0 },
|
|
||||||
{ .param = "boxkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBox key for Nagravision SCs / CAM key for Irdeto SCs / sessionkey for Seca SCs / CamID for Viaccess.\n\n**Default:**\n```ini\nboxkey =\n```", .status = 0 },
|
|
||||||
{ .param = "rsakey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRSA key for Nagravision/Tiger SCs / CAM key data for Irdeto SCs, Conax SCs.\n\n**Default:**\n```ini\nrsakey =\n```", .status = 0 },
|
|
||||||
{ .param = "cwpkkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCWPK (Control Word Protection Key) for Nagra readers.\n\n**Format:**\n```ini\ncwpkkey = index:hex_bytes\n```\n\n**Example:**\n```ini\ncwpkkey = 0:0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwpkkey =\n```", .status = 0 },
|
|
||||||
{ .param = "deskey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDES key for the reader in hexadecimal format.\n\n**Format:**\n```ini\ndeskey = hex_bytes\n```\n\n**Example:**\n```ini\ndeskey = 0102030405060708090A0B0C0D0E\n```\n\n**Default:**\n```ini\ndeskey =\n```", .status = 0 },
|
|
||||||
{ .param = "cak7_mode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nInitialize card in CAK7 (Merlin) mode for Nagravision readers.\n\n```ini\ncak7_mode = 0 # standard mode (default)\ncak7_mode = 1 # CAK7/Merlin mode\n```\n\n**Format:**\n```ini\ncak7_mode = 0|1\n```\n\n**Example:**\n```ini\ncak7_mode = 1\n```\n\n**Default:**\n```ini\ncak7_mode = 0\n```", .status = 0 },
|
|
||||||
{ .param = "card_startdate_basemonth", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase month for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_basemonth = month\n```\n\n**Example:**\n```ini\ncard_startdate_basemonth = 1\n```\n\n**Default:**\n```ini\ncard_startdate_basemonth = 1\n```", .status = 0 },
|
|
||||||
{ .param = "card_startdate_baseyear", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase year for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_baseyear = year\n```\n\n**Example:**\n```ini\ncard_startdate_baseyear = 1997\n```\n\n**Default:**\n```ini\ncard_startdate_baseyear = 1997\n```", .status = 0 },
|
|
||||||
{ .param = "card_expiredate_basemonth", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase month for card expiration date calculation.\n\n**Format:**\n```ini\ncard_expiredate_basemonth = month\n```\n\n**Example:**\n```ini\ncard_expiredate_basemonth = 1\n```\n\n**Default:**\n```ini\ncard_expiredate_basemonth = 1\n```", .status = 0 },
|
|
||||||
{ .param = "card_expiredate_baseyear", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase year for card expiration date calculation.\n\n**Format:**\n```ini\ncard_expiredate_baseyear = year\n```\n\n**Example:**\n```ini\ncard_expiredate_baseyear = 1997\n```\n\n**Default:**\n```ini\ncard_expiredate_baseyear = 1997\n```", .status = 0 },
|
|
||||||
{ .param = "ins7e", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAdd 26 hex-bytes payload for **NDS Videoguard 2 SCs**.\n\n```ini\nins7e = payload # 26 hex bytes\n = # None (default)\n```\n\n⚠️ **Attention:** Valid for physical readers only", .status = 0 },
|
|
||||||
{ .param = "ins42", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nINS42 command data for Irdeto readers.\n\n**Format:**\n```ini\nins42 = hex_bytes\n```\n\n**Example:**\n```ini\nins42 = 0102030405\n```\n\n**Default:**\n```ini\nins42 =\n```", .status = 0 },
|
|
||||||
{ .param = "ins7e11", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAdd TA1 Byte for **NDS Videoguard 2 SCs**.\n\n```ini\nins7e11 = # None (default)\n = 11 # 0001 FI + 0001 DI (1 x)\n = 13 # 0001 FI + 0011 DI (4 x)\n = 14 # 0001 FI + 0100 DI (8 x)\n = 15 # 0001 FI + 0101 DI (16 x)\n```\n\n⚠️ **Attention:** Valid for physical readers only", .status = 0 },
|
|
||||||
{ .param = "ins2e06", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAdd check control for pin payload (4 hex bytes) for **NDS Videoguard 2 SCs**.\n\n```ini\nins2e06 = Payload # 4 hex bytes\n = # None (blank, default)\n```\n\n⚠️ **Attention:** Valid for physical readers only", .status = 0 },
|
|
||||||
{ .param = "k1_generic", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nGeneric K1 key for DRE/Bulcrypt readers. DES or 3DES key in hexadecimal.\n\n**Format:**\n```ini\nk1_generic = hex_bytes\n```\n\n**Example:**\n```ini\nk1_generic = 0102030405060708\n```\n\n**Default:**\n```ini\nk1_generic =\n```", .status = 0 },
|
|
||||||
{ .param = "k1_unique", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUnique K1 key for DRE/Bulcrypt readers. DES or 3DES key in hexadecimal.\n\n**Format:**\n```ini\nk1_unique = hex_bytes\n```\n\n**Example:**\n```ini\nk1_unique = 0102030405060708\n```\n\n**Default:**\n```ini\nk1_unique =\n```", .status = 0 },
|
|
||||||
{ .param = "fix07", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable 0x07 fix for **NDS Videoguard 2 SCs**.\n\n```ini\nfix07 = 0 # Disabled\nfix07 = 1 # Enabled (default)\n```\n\n⚠️ **Attention:** Valid for physical readers only\n\n**Format:**\n```ini\nfix07 = 0|1\n```\n\n**Example:**\n```ini\nfix07 = 0\n```\n\n**Default:**\n```ini\nfix07 = 1\n```", .status = 0 },
|
|
||||||
{ .param = "fix9993", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable fix for 9993 error with CAID 0919 SCs.\n\n```ini\nfix9993 = 0 # Disabled (default)\nfix9993 = 1 # Enabled\n```\n\n**Format:**\n```ini\nfix9993 = 0|1\n```\n\n**Example:**\n```ini\nfix9993 = 1\n```\n\n**Default:**\n```ini\nfix9993 = 0\n```", .status = 0 },
|
|
||||||
{ .param = "readtiers", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMethod to get tiers of **NDS Videoguard SCs**.\n\n```ini\nreadtiers = 0 # Disabled (default)\nreadtiers = 1 # ins70 (new) method\nreadtiers = 2 # ins76 (old) method\n```\n\n**Format:**\n```ini\nreadtiers = 0|1|2\n```\n\n**Example:**\n```ini\nreadtiers = 1\n```\n\n**Default:**\n```ini\nreadtiers = 0\n```", .status = 0 },
|
|
||||||
{ .param = "force_irdeto", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForce Irdeto SC mode even if RSA key is set for Irdeto tunneled Nagravision SC.\n\n```ini\nforce_irdeto = 0 # No (default)\nforce_irdeto = 1 # Yes\n```\n\n**Format:**\n```ini\nforce_irdeto = 0|1\n```\n\n**Example:**\n```ini\nforce_irdeto = 1\n```\n\n**Default:**\n```ini\nforce_irdeto = 0\n```", .status = 0 },
|
|
||||||
{ .param = "ecmnotfoundlimit", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of ECMs with \"not found\" answer until the reader will be restarted.\n\n```ini\necmnotfoundlimit = count\n = 0 # No limit (default)\n```\n\n**Default:**\n```ini\necmnotfoundlimit = 0\n```", .status = 0 },
|
|
||||||
{ .param = "ecmwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine valid ECM length **in hex** and provid for physical reader.\n\n**Syntax:**\n```ini\necmwhitelist = [CAID[@provid]:]length[,length]...[;[CAID[@provid]:]length[,length]...]...\n```\n\n**Examples:**\n```ini\necmwhitelist = 10,20,30,0a,0b,0c\necmwhitelist = 0100:10,20;0200@12345:0a,4b\n = # None (default) and provid 000000\n```\n\n⚠️ **In normal operation mode this parameter is not required!**\n\n📋 **[List of ECM lengths](http://www.streamboard.tv/oscam/wiki/ECMLengthList)**", .status = 0 },
|
|
||||||
{ .param = "ecmheaderwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet valid ECM header per CAID and provid **in hex**.\n\n**Syntax:**\n```ini\necmheaderwhitelist = [CAID[@provid]:]header[,header]...[;[@provid]:]header[,header]...]...\n```\n\n**Default:** None, provid = 000000\n\n📋 **[HeaderWhitelist](http://www.streamboard.tv/oscam/wiki/HeaderWhitelist)**", .status = 0 },
|
|
||||||
{ .param = "detect", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nCard status (inserted or removed) is detected via a serial device (UART/SCI) handshake input line.\n\n**Values:**\n```ini\ndetect = cd (default) # Carrier Detect\n = cts # Clear To Send\n = dsr # Data Set Ready\n = ring # Ring Indicator\n = none # No detection line connected, card always detected as inside\n```\n\n- `none` means: no detection line connected to the card reader. The card is always detected as being inside cardreader.\n- Inverse detect signal: prefix \"!\" (e.g., `detect = !cts`)\n\n**If `use_gpio = 1` is set:**\n```ini\ndetect = gpio1...gpio7 # Card status detected via a GPIO\n```\n\nGPIO means \"general purpose input output\".\n\n**Example:**\n```ini\n[reader]\nlabel = mymouse\ndescription = mymouse xxx\nprotocol = mouse\ndevice = /dev/ttyUSB0\nservices = xxx\nboxkey = 1122334455667788\nforce_irdeto = 1\ndetect = cd\nmhz = 1000\ncardmhz = 600\ngroup = 1,2,3\nemmcache = 1,3,2\n```", .status = 0 },
|
|
||||||
{ .param = "nagra_read", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRead **Nagravision** records (on NCMED cards only).\n\n```ini\nnagra_read = 0 # Disabled (default)\nnagra_read = 1 # Read all records with expired rights\nnagra_read = 2 # Read records with valid rights only\n```\n\n**Format:**\n```ini\nnagra_read = 0|1|2\n```\n\n**Example:**\n```ini\nnagra_read = 2\n```\n\n**Default:**\n```ini\nnagra_read = 0\n```", .status = 0 },
|
|
||||||
{ .param = "detect_seca_nagra_tunneled_card", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDetect Seca cards tunneled through Nagra for hybrid cards.\n\n```ini\ndetect_seca_nagra_tunneled_card = 0 # detection disabled\ndetect_seca_nagra_tunneled_card = 1 # detection enabled (default)\n```\n\n**Format:**\n```ini\ndetect_seca_nagra_tunneled_card = 0|1\n```\n\n**Example:**\n```ini\ndetect_seca_nagra_tunneled_card = 0\n```\n\n**Default:**\n```ini\ndetect_seca_nagra_tunneled_card = 1\n```", .status = 0 },
|
|
||||||
{ .param = "mhz", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet reader frequency in units of 10 kHz. If mhz > cardmhz you are in overclocking mode.\n\n**Example:**\n```ini\ncardmhz = 600 # (6000 KHz = 6 MHz)\nmhz = 1000 # (10000 KHz = 10 MHz)\n```\n\n**Default:** 357\n\nAuto clock speed in **Dreambox mode**: set to -1.\n\n📋 **[List of default and overclocking card frequencies](http://www.streamboard.tv/oscam/wiki/CardsList)**", .status = 0 },
|
|
||||||
{ .param = "cardmhz", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nSet standard SC frequency in units of 10 kHz. For Irdeto SC set to 600.\n\n**Examples:**\n```ini\ncardmhz = 600 # Irdeto card\n = 357 # Default (blank)\n```\n\n**INTERNAL READERS**\n\nIf you use `cardmhz > 2000` OSCam will switch to PLL clocking. Internal readers of boxes from Dream Multimedia GmbH can be clocked more precise with it.\n\nThe used cardmhz should reflect the highest frequency of the PLL crystal in the internal cardreader. OSCam will calculate the best PLL divider that comes nearest to the wanted user card speed specified in cardmhz.\n\n**Recommended settings:**\n- Models with PPC-CPU (DM500/DM600/DM7000/DM7020): `cardmhz = 3150`\n- Models with MIPS-CPU (DM500HD/DM800/DM800SE/DM8k/DM7020HD etc.): `cardmhz = 2700`\n- DM7025 (special): `cardmhz = 8300`\n\n⚠️ **If only the parameter cardmhz is set (without mhz = xxx) then OSCam clocks the card automatically with the ATR!**\n\n**Example:**\nYou have a DM800 HD PVR (MIPS), so you should set cardmhz to 2700. If you have a Nagra card that should run on 5 MHz:\n- Normal clocking: `cardmhz = 2700` and `mhz = 500`\n- Overclocking: `cardmhz = 2700` and `mhz = 900` (card will run at 9 MHz)\n\n⚠️ Keep in mind that most internal readers of non-dreamboxes clock the cards automatically and completely ignore any user clockspeed setting. But you should set cardmhz and mhz anyway, as it's still used to calculate the correct timings in OSCam.\n\n📋 **[List of default and overclocking card frequencies](http://www.streamboard.tv/oscam/wiki/CardsList)**", .status = 0 },
|
|
||||||
{ .param = "mode", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nSet card init mode for **AzBox** reader.\n\n```ini\nmode = 1 # AzBox-Reader\n = 0 # None (default)\n```\n\n**Default:**\n```ini\nmode = 0\n```", .status = 0 },
|
|
||||||
{ .param = "ident", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n⚠️ **Attention:** If in `oscam.conf [global]` loadbalancing is enabled among `lb_mode`, then there may be **no entries**!\n\n⚠️ **Note:** This parameter is only used for EMM and not for ECM. You cannot force ECM to be sent to the card using this parameter.\n\nDefine CAID and ident **SC specific** for reader.\n\n**Syntax:**\n```ini\nident = <CAID>:<ident>[,ident]...[;<CAID>:<ident>[,ident]...]...\n```\n\n**Example:**\n```ini\nident = 0100:123456,234567;0200:345678,456789\n = # Blank, no definition (default)\n```", .status = 0 },
|
|
||||||
{ .param = "chid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine **Irdeto ChID** for reader.\n\n**Examples:**\n```ini\nchid = 0100:12\nchid = 0100:12;0604:0000BA,000101,00010E,000141\n = # Blank (default)\n```", .status = 0 },
|
|
||||||
{ .param = "class", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine class **in hex** SC specific for reader.\n\n**Example:**\n```ini\nclass = 01,02,!1b,!2b # 01 and 02 yes, 1b and 2b no\n = # Blank, no definition (default)\n```", .status = 0 },
|
|
||||||
{ .param = "aeskeys", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMultiple 16 bytes AES keys for Viaccess SCs (the used postprocessing AES key is specified through the D2 nano of the ECM).\n\n**Syntax:**\n```\nCAID@ident:AES key #0 CAID #0[,AES key #1 CAID #0],...[;CAID #1@ident:AES key #0 CAID #1[,AES key #1 CAID #1],...]...\n```\n\n**Special AES keys:**\n- `00` = do not return any CW, no AES key specified\n- `FF` = return CW received from the SC, no AES key specified\n\n**Examples:**\n```ini\naeskeys = 0500@012345:000102030405060708090a0b0c0d0e0f;0500@543210:0,0,0f0e0d0c0b0a090807060504030201\naeskeys = 0500@012345:key0,key1,key2,key3,key4,key5,...;0500@543210:key0,key1,key2,key3,key4,key5,...\n```\n\nIf keys are unknown, replace them with 0:\n```ini\naeskeys = 0500@012345:key0,key1,0,0,key4,key5,...\n```", .status = 0 },
|
|
||||||
{ .param = "group", .config = "server", .section = "reader", .text = "**🔴 Required parameter**\n\nReader assignment to group. Each reader must be listed in one or more groups. This will determine which client has access to what reader.\n\nValid values: 1-64\n\n**Syntax:**\n```ini\ngroup = 1...64[,1...64]...\n```\n\n**Examples:**\n```ini\ngroup = 1 # One group\ngroup = 1,4,5 # Multiple groups\n```\n\n⚠️ **Setting required parameter blank is not allowed!**", .status = 0 },
|
|
||||||
{ .param = "emmcache", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet EMM cache of local reader.\n\n⚠️ **Attention:** Without this parameter, no EMMs are shown in the log!\n\n**Format:**\n```ini\nemmcache = <usecache>,<rewrite>,<logging>,<stb-emm>\n```\n\n**Parameters:**\n\n**`<usecache>`:**\n- `0` = Disable usage of emmcache and emmstats (default)\n- `1` = Enable emmcache, emmstats and save to file if OSCam is stopped\n- `2` = Enable emmcache, emmstats but don't save to file if OSCam is stopped\n\n**`<rewrite>`:**\n- `n` = Determines how often one and the same EMM is written (only if `<usecache>` = 1 or 2)\n\n**`<logging>`:**\n- `0` = EMM logging disabled\n- `1` = Logging EMM errors\n- `2` = Logging written EMMs\n- `4` = Logging skipped EMMs\n- `8` = Logging blocked EMMs\n- `16` = Logging audisabled EMMs\n\nSummarizing these values is possible. 31 shows all kinds of messages.\n\n**`<stb-emm>`:**\n- `0` = EMM for STB are ignored (default)\n- `1` = EMM for STB are sent to the reader (very specific usage)\n\n**Examples:**\n```ini\nemmcache = 1,3,10,0 # Cache on, write 3x, log written (2) and blocked (8) = 10, don't send stb-emm\nemmcache = 1,2,6,1 # Cache on, write 2x, log written (2) and skipped (4) = 6, send stb-emm\n```\n\n**Note:** **stb-emm** is only handy for specific usage (Viaccess: see commit [#10584](http://www.streamboard.tv/oscam/changeset/10584)). In Viaccess we saw some EMM-G that are for the STB and not for the card. Those EMMs are used, for example, to define overencryption key (AES) into the STB to encrypt STB-Card dialog.", .status = 0 },
|
|
||||||
{ .param = "blockemm-unknown", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock unknown types of EMMs.\n\n```ini\nblockemm-unknown = 0 # No block (default)\nblockemm-unknown = 1 # Block all unknown kinds of EMMs\n```\n\n**Format:**\n```ini\nblockemm-unknown = 0|1\n```\n\n**Example:**\n```ini\nblockemm-unknown = 1\n```\n\n**Default:**\n```ini\nblockemm-unknown = 0\n```", .status = 0 },
|
|
||||||
{ .param = "blockemm-u", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock unique EMMs.\n\n```ini\nblockemm-u = 0 # No block (default)\nblockemm-u = 1 # Block EMMs, which are addressed to card immediately\n```\n\n**Format:**\n```ini\nblockemm-u = 0|1\n```\n\n**Example:**\n```ini\nblockemm-u = 1\n```\n\n**Default:**\n```ini\nblockemm-u = 0\n```", .status = 0 },
|
|
||||||
{ .param = "blockemm-s", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock shared EMMs.\n\n```ini\nblockemm-s = 0 # No block (default)\nblockemm-s = 1 # Block EMMs, which are addressed to certain groups of cards\n```\n\n**Format:**\n```ini\nblockemm-s = 0|1\n```\n\n**Example:**\n```ini\nblockemm-s = 1\n```\n\n**Default:**\n```ini\nblockemm-s = 0\n```", .status = 0 },
|
|
||||||
{ .param = "blockemm-g", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock global EMMs.\n\n```ini\nblockemm-g = 0 # No block (default)\nblockemm-g = 1 # Block EMMs, which are addressed to all cards\n```\n\n**Format:**\n```ini\nblockemm-g = 0|1\n```\n\n**Example:**\n```ini\nblockemm-g = 1\n```\n\n**Default:**\n```ini\nblockemm-g = 0\n```", .status = 0 },
|
|
||||||
{ .param = "saveemm-unknown", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave unknown EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-unknown = 0 # Disabled (default)\nsaveemm-unknown = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-unknown = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-unknown = 1\n```\n\n**Default:**\n```ini\nsaveemm-unknown = 0\n```", .status = 0 },
|
|
||||||
{ .param = "saveemm-u", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave unique EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-u = 0 # Disabled (default)\nsaveemm-u = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-u = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-u = 1\n```\n\n**Default:**\n```ini\nsaveemm-u = 0\n```", .status = 0 },
|
|
||||||
{ .param = "saveemm-s", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave shared EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-s = 0 # Disabled (default)\nsaveemm-s = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-s = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-s = 1\n```\n\n**Default:**\n```ini\nsaveemm-s = 0\n```", .status = 0 },
|
|
||||||
{ .param = "saveemm-g", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSave global EMMs to file. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n```ini\nsaveemm-g = 0 # Disabled (default)\nsaveemm-g = 1 # Enabled\n```\n\n**Format:**\n```ini\nsaveemm-g = 0|1\n```\n\n**Example:**\n```ini\nsaveemm-g = 1\n```\n\n**Default:**\n```ini\nsaveemm-g = 0\n```", .status = 0 },
|
|
||||||
{ .param = "blockemm-bylen", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBlock all types of EMMs by length. Maximum 10 values.\n\n**Syntax:**\n```ini\nblockemm-bylen = [length range,length range]... (decimal)\n```\n\n**Example:**\n```ini\nblockemm-bylen = 1-10,11-\n```\n\n**Default:**\n```ini\nblockemm-bylen =\n```", .status = 0 },
|
|
||||||
{ .param = "lb_weight", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nThe higher the value, the higher the probability for reader selection. It's a divider for the average response time.\n\n**Format:**\n```ini\nlb_weight = weight\n```\n\n**Example:**\n```ini\nlb_weight = 200\n```\n\n**Default:**\n```ini\nlb_weight = 100\n```", .status = 0 },
|
|
||||||
{ .param = "lb_force_fallback", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet the reader always as fallback for load balancing without considering the reader's statistics.\n\n```ini\nlb_force_fallback = 0 # Default\nlb_force_fallback = 1 # Set reader always as fallback\n```\n\n**Format:**\n```ini\nlb_force_fallback = 0|1\n```\n\n**Example:**\n```ini\nlb_force_fallback = 1\n```\n\n**Default:**\n```ini\nlb_force_fallback = 0\n```", .status = 0 },
|
|
||||||
{ .param = "savenano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nList of EMM-nanos (in hex w/o 0x) to save or all EMM-nanos. Only valid for physical readers. The path can be defined with `emmlogdir=` in `oscam.conf` (default=config-dir).\n\n**Syntax:**\n```ini\nsavenano = nano[,nano]...|all\n```\n\n**Examples:**\n```ini\nsavenano = 45,93,7a,ff\n = all\n = # Blank (default)\n```", .status = 0 },
|
|
||||||
{ .param = "blocknano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nList of EMM-nanos to block (in hex w/o 0x) or all EMM-nanos. Only valid for physical readers!\n\n**Examples:**\n```ini\nblocknano = 45,93,7a,ff\n = all\n = # Blank (default)\n```", .status = 0 },
|
|
||||||
{ .param = "dropbadcws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReject bad CWs, send \"not found\" instead of bad CWs.\n\n```ini\ndropbadcws = 0 # Default\ndropbadcws = 1 # Reject bad CWs\n```\n\n**Format:**\n```ini\ndropbadcws = 0|1\n```\n\n**Example:**\n```ini\ndropbadcws = 1\n```\n\n**Default:**\n```ini\ndropbadcws = 0\n```", .status = 0 },
|
|
||||||
{ .param = "disablecrccws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDisable CW checksum test.\n\n```ini\ndisablecrccws = 0 # Enable (default)\ndisablecrccws = 1 # Disable CW checksum test\n```\n\n**Format:**\n```ini\ndisablecrccws = 0|1\n```\n\n**Example:**\n```ini\ndisablecrccws = 1\n```\n\n**Default:**\n```ini\ndisablecrccws = 0\n```", .status = 0 },
|
|
||||||
{ .param = "use_gpio", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nUse GPIO as card detect/reset.\n\n```ini\nuse_gpio = 0 # Off (default)\nuse_gpio = 1 # On\n```\n\n**Format:**\n```ini\nuse_gpio = 0|1\n```\n\n**Example:**\n```ini\nuse_gpio = 1\n```\n\n**Default:**\n```ini\nuse_gpio = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cccversion", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\n**Only for CCcam**\n\nDefine CCcam version.\n\n**Syntax:**\n```ini\ncccversion = <mainversion>,<version>,<sub version>\n```\n\n**Example:**\n```ini\ncccversion = 1.2.34\n```", .status = 0 },
|
|
||||||
{ .param = "cccmaxhops", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nDefine CCcam maximum SC distance hops.\n\n```ini\ncccmaxhops = 0 # Local SCs only\n = 1 # Local SCs + 1 hop\n = 2 # Local SCs + 2 hops\n = ... # And so on\n = 10 # Default\n```\n\n**Default:**\n```ini\ncccmaxhops = 10\n```", .status = 0 },
|
|
||||||
{ .param = "cccmindown", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nFilters all readers with hops smaller than number.\n\n```ini\ncccmindown = number\n = 0 # Default\n```\n\n**Default:**\n```ini\ncccmindown = 0\n```", .status = 0 },
|
|
||||||
{ .param = "ccckeepalive", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nSend keepalive messages to keep connection to remote CCCam server up.\n\n```ini\nccckeepalive = 0 # No (default)\nccckeepalive = 1 # Yes\n```\n\n**Format:**\n```ini\nccckeepalive = 0|1\n```\n\n**Example:**\n```ini\nccckeepalive = 1\n```\n\n**Default:**\n```ini\nccckeepalive = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cccam_reshare", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReshare level of CCC proxy cards to be sent into gbox network.\n\n```ini\ncccam_reshare = -1 # No resharing (default)\n = 0 # Reshare for direct peer only\n = 1 # Reshare for direct peer plus next level\n = x # Resharing for direct peer plus x share level\n```\n\n**Default:**\n```ini\ncccam_reshare = -1\n```", .status = 0 },
|
|
||||||
{ .param = "cccreconnect", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReconnect again after ECM request timeout in milliseconds.\n\n```ini\ncccreconnect = timeout # Timeout in milliseconds\n = 12000 # Default\n```\n\n**Default:**\n```ini\ncccreconnect = 12000\n```", .status = 0 },
|
|
||||||
{ .param = "ccchop", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nSet hop for **non** CCCam readers.\n\n```ini\nccchop = hop\n = 0 # Default\n```\n\n**Default:**\n```ini\nccchop = 0\n```", .status = 0 },
|
|
||||||
{ .param = "resetalways", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAlways reset the card before each ECM request.\n\n```ini\nresetalways = 0 # normal operation (default)\nresetalways = 1 # always reset card\n```\n\n**Format:**\n```ini\nresetalways = 0|1\n```\n\n**Example:**\n```ini\nresetalways = 1\n```\n\n**Default:**\n```ini\nresetalways = 0\n```", .status = 0 },
|
|
||||||
{ .param = "deprecated", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nFirst the SC will be initialized in normal mode. If it fails, the SC will be automatically reverted to deprecated mode, so that the SC speed will not be changed and the communication will remain on normal ATR speed of 9600 baud.\n\n```ini\ndeprecated = 0 # Normal mode (default)\ndeprecated = 1 # Use deprecated SC mode only\n```\n\n**Format:**\n```ini\ndeprecated = 0|1\n```\n\n**Example:**\n```ini\ndeprecated = 1\n```\n\n**Default:**\n```ini\ndeprecated = 0\n```", .status = 0 },
|
|
||||||
{ .param = "audisabled", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nExclude reader from auto AU (auto update).\n\n```ini\naudisabled = 0 # Not excluded (default)\naudisabled = 1 # Excluded\n```\n\n**Format:**\n```ini\naudisabled = 0|1\n```\n\n**Example:**\n```ini\naudisabled = 1\n```\n\n**Default:**\n```ini\naudisabled = 0\n```", .status = 0 },
|
|
||||||
{ .param = "auprovid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet provider ID to use the right reader for auto AU.\n\n**Example:**\n```ini\nauprovid = 123456\n```\n\n**Default:**\n```ini\nauprovid =\n```", .status = 0 },
|
|
||||||
{ .param = "ndsversion", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet NDS **Videoguard** version.\n\n```ini\nndsversion = 0 # Autodetection (default)\n = 1 # NDS Videoguard 1\n = 12 # NDS Videoguard 1+\n = 2 # NDS Videoguard 2\n```\n\n**Default:**\n```ini\nndsversion = 0\n```", .status = 0 },
|
|
||||||
{ .param = "ratelimitecm", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of different SIDs in ECMs allowed for an interval.\n\n```ini\nratelimitecm = number\n = 0 # Default\n```\n\n**Default:**\n```ini\nratelimitecm = 0\n```", .status = 0 },
|
|
||||||
{ .param = "ecmunique", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable check for matching ECM hash in ratelimit slot.\n\n```ini\necmunique = 0 # Default\necmunique = 1 # Enable check for matching ECM hash in ratelimit slot\n```\n\n⚠️ **Remark:** Parameter `ratelimitecm` must be set to be able to enable this option!\n\n**Format:**\n```ini\necmunique = 0|1\n```\n\n**Example:**\n```ini\necmunique = 1\n```\n\n**Default:**\n```ini\necmunique = 0\n```", .status = 0 },
|
|
||||||
{ .param = "ratelimittime", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nInterval for rate limit in milliseconds.\n\n```ini\nratelimittime = milliseconds\n = 0 # Default\n```\n\n**Default:**\n```ini\nratelimittime = 0\n```", .status = 0 },
|
|
||||||
{ .param = "srvidholdtime", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nTime to keep service ID in ratelimit slot. During this time checking for `ecmunique` is disabled.\n\n```ini\nsrvidholdtime = milliseconds\n = 0 # Default\n```\n\n**Default:**\n```ini\nsrvidholdtime = 0\n```", .status = 0 },
|
|
||||||
{ .param = "cooldown", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine cooldown.\n\n**Syntax:**\n```ini\ncooldown = delay,duration\n```\n\n**Parameters:**\n- `delay` = Delay in milliseconds for which the reader is allowed to do more ECM requests than defined by parameter `ratelimitecm`\n- `duration` = Duration in milliseconds the reader needs to cooldown\n\nBoth parameters are mandatory when used.\n\n⚠️ **Parameters `ratelimitecm` and `ratelimittime` are required!**\n\n**Default:**\n```ini\ncooldown =\n```", .status = 0 },
|
|
||||||
{ .param = "cooldowndelay", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCooldown delay in milliseconds. Time delay during which the reader is allowed to process more ECM requests than defined by ratelimitecm.\n\n**Format:**\n```ini\ncooldowndelay = milliseconds\n```\n\n**Example:**\n```ini\ncooldowndelay = 5000\n```\n\n**Default:**\n```ini\ncooldowndelay =\n```", .status = 0 },
|
|
||||||
{ .param = "cooldowntime", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCooldown duration in milliseconds. Time the reader needs to cool down after exceeding rate limits.\n\n**Format:**\n```ini\ncooldowntime = milliseconds\n```\n\n**Example:**\n```ini\ncooldowntime = 60000\n```\n\n**Default:**\n```ini\ncooldowntime =\n```", .status = 0 },
|
|
||||||
{ .param = "maxparallel", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMaximum number of parallel active services allowed for this reader.\n\nUseful for limiting load on readers with slot restrictions. When the limit is reached, the reader is temporarily skipped and other readers are tried. A service slot is reserved only when a reader delivers a CW (not when the request is sent). This prevents readers from blocking capacity for services they don't end up serving when multiple readers are queried simultaneously.\n\nA service slot expires when no ECM is received within the measured ECM interval plus the `paralleltimeout` buffer.\n\n```ini\nmaxparallel = 0 # unlimited (default)\nmaxparallel = 1 # only 1 active service at a time\nmaxparallel = 2 # max 2 active services\n```\n\n**Format:**\n```ini\nmaxparallel = count\n```\n\n**Example:**\n```ini\nmaxparallel = 2\n```\n\n**Default:**\n```ini\nmaxparallel = 0\n```\n\n⚠️ **After changing `maxparallel` or `parallelfactor`, OSCam must be restarted.**", .status = 0 },
|
|
||||||
{ .param = "parallelfactor", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMultiplier for pending slots used during zapping. Pending slots allow temporary capacity overrun while switching channels, preventing black screens when zapping with a single reader.\n\nWhen zapping, new services go to pending slots if active slots are full. Pending services are promoted to active when slots free up (FIFO), or dropped when active services prove they're still active by sending ECMs (FIFO).\n\nThe number of pending slots is calculated as: `round(maxparallel × parallelfactor)`\n\n```ini\nparallelfactor = 0 # disable pending slots (strict limit, may cause black screen when zapping)\nparallelfactor = 1.5 # default - with maxparallel=2: 3 pending slots\nparallelfactor = 2.0 # with maxparallel=2: 4 pending slots\n```\n\n**Pending slots by configuration:**\n\n| maxparallel | parallelfactor | Pending Slots |\n|-------------|----------------|---------------|\n| 1 | 1.5 | 2 |\n| 2 | 1.5 | 3 |\n| 4 | 1.5 | 6 |\n| 1 | 0 | 0 (disabled) |\n\n**Format:**\n```ini\nparallelfactor = factor\n```\n\n**Example:**\n```ini\nparallelfactor = 1.5\n```\n\n**Default:**\n```ini\nparallelfactor = 1.5\n```\n\n⚠️ **After changing `maxparallel` or `parallelfactor`, OSCam must be restarted.**", .status = 0 },
|
|
||||||
{ .param = "paralleltimeout", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nTimeout buffer in milliseconds added to the measured ECM interval to determine when a service slot expires.\n\nThe ECM interval is measured automatically per service. A service slot expires when no ECM is received within (measured_interval + paralleltimeout). If no interval has been measured yet, a default timeout of 10000 ms plus paralleltimeout is used.\n\n```ini\nparalleltimeout = 1000 # default\nparalleltimeout = 1500 # 1.5 seconds buffer\n```\n\n**Format:**\n```ini\nparalleltimeout = milliseconds\n```\n\n**Example:**\n```ini\nparalleltimeout = 1500\n```\n\n**Default:**\n```ini\nparalleltimeout = 1000\n```", .status = 0 },
|
|
||||||
{ .param = "read_old_classes", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRead old classes from Viaccess cards.\n\n```ini\nread_old_classes = 0 # read only current classes\nread_old_classes = 1 # read old classes too (default)\n```\n\n**Format:**\n```ini\nread_old_classes = 0|1\n```\n\n**Example:**\n```ini\nread_old_classes = 0\n```\n\n**Default:**\n```ini\nread_old_classes = 1\n```", .status = 0 },
|
|
||||||
{ .param = "Parameters", .config = "cert", .section = "", .text = "- **CAID**: Conditional Access Identification - numeric identifier for the encryption provider (in hexadecimal)\n- **reserved**: Reserved field (typically set to 00000000)\n- **IPK**: Issuer Public Key or session key in hexadecimal format", .status = 0 },
|
|
||||||
{ .param = "Cryptoworks", .config = "cert", .section = "", .text = "This file is specifically designed for Cryptoworks conditional access systems where:\n- Issuer Public Keys are required for decryption\n- Session keys need to be mapped to specific CAIDs\n- Multiple providers may use different keys", .status = 0 },
|
|
||||||
{ .param = "Key", .config = "cert", .section = "", .text = "The file provides a centralized location for:\n- Storing cryptographic keys\n- Managing multiple CAID mappings\n- Updating keys without modifying other configuration files", .status = 0 },
|
|
||||||
{ .param = "m", .config = "whitelist", .section = "", .text = "```\nm: 3456:123456::::: 4567:234567:\n```\n\nUsed for mapping between different identifiers.", .status = 0 },
|
|
||||||
{ .param = "w", .config = "whitelist", .section = "", .text = "```\nw: [CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```\n\nDefines ECM length whitelisting rules. Only ECMs matching these criteria will be processed.", .status = 0 },
|
|
||||||
{ .param = "l", .config = "whitelist", .section = "", .text = "```\nl: [CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```\n\nECM length whitelisting that does not proceed with any other ECM length. This is an abbreviation for normal ECM length whitelisting using the `w:` parameter.", .status = 0 },
|
|
||||||
{ .param = "i", .config = "whitelist", .section = "", .text = "```\ni: [CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```\n\nIgnores ECM requests matching the specified criteria.", .status = 0 },
|
|
||||||
{ .param = "Field", .config = "whitelist", .section = "", .text = "```\n[prefix]:[CAID][:][provider ID][:][service ID][:][ECM PID][:][CHID][:][ECM length 1[,ECM length 2]...]]\n```", .status = 0 },
|
|
||||||
{ .param = "Field", .config = "whitelist", .section = "", .text = "- **prefix**: Entry type (`m`, `w`, `l`, or `i`)\n- **CAID**: Conditional Access ID (4-digit hexadecimal)\n- **provider ID**: Provider identifier (hexadecimal)\n- **service ID**: Service identifier (hexadecimal)\n- **ECM PID**: ECM Process ID (hexadecimal)\n- **CHID**: Channel ID (hexadecimal)\n- **ECM length**: ECM length in bytes (decimal), multiple values separated by commas\n\nAll fields after the prefix are optional. Empty fields are indicated by consecutive colons.", .status = 0 },
|
|
||||||
{ .param = "Basic", .config = "whitelist", .section = "", .text = "```\n# Whitelist all CAID 0100\nw:0100\n\n# Ignore CAID 0200 with service ID 1234\ni:0200::1234\n\n# Ignore CHID 2345\ni:::::2345\n\n# Allow all others (blacklist mode)\nw:\n```", .status = 0 },
|
|
||||||
{ .param = "Provider-Specific", .config = "whitelist", .section = "", .text = "#### Sky Germany S02 (Nagra)\n\n```\n# S02\nw:1702:000000::::93\n```\n\n#### Sky Germany S02-Tunnel\n\n```\n# S02-Tunnel\nw:1833:000000::::89\n```\n\n#### Sky Germany V13 (NDS)\n\n```\n# V13\nw:09C4:000000::::46,58,90,95\n```\n\n#### HD+ (Nagra)\n\n```\n# HD+\nw:1830:000000::::92\nw:1830:003411::::92\nw:1830:008011::::92\n```\n\n#### ORF (CryptoWorks)\n\n```\n# CAMD3-Keys\nw:0D05:::::9C\n```", .status = 0 },
|
|
||||||
{ .param = "Whitelist", .config = "whitelist", .section = "", .text = "In whitelist mode, only explicitly allowed ECMs are processed:\n\n```\n# Allow only specific CAIDs\nw:1702\nw:09C4\nw:1830\n\n# Block everything else (implicit - no w: at end)\n```", .status = 0 },
|
|
||||||
{ .param = "Blacklist", .config = "whitelist", .section = "", .text = "In blacklist mode, all ECMs are allowed except those explicitly blocked:\n\n```\n# Block specific problematic services\ni:0500::1234\ni:0100::5678\n\n# Allow everything else\nw:\n```", .status = 0 },
|
|
||||||
{ .param = "Mixed", .config = "whitelist", .section = "", .text = "Combine whitelist and blacklist rules:\n\n```\n# Whitelist specific CAID with certain ECM lengths\nw:1702:000000::::93\n\n# Ignore problematic service\ni:0500::1234\n\n# Allow all other CAIDs\nw:\n```", .status = 0 },
|
|
||||||
{ .param = "Optimizing", .config = "whitelist", .section = "", .text = "1. **Be Specific**: Use specific rules to reduce processing overhead\n2. **Order Matters**: Place most frequently matched rules at the top\n3. **Minimize Entries**: Only include rules you actually need\n4. **Memory Consideration**: Avoid copying entire whitelist databases; use only what you need", .status = 0 },
|
|
||||||
{ .param = "Finding", .config = "whitelist", .section = "", .text = "To determine ECM lengths for your setup:\n\n1. Enable debug logging in OSCam\n2. Monitor ECM requests in the log\n3. Note the ECM lengths for services you want to whitelist\n4. Add appropriate entries to oscam.whitelist", .status = 0 },
|
|
||||||
{ .param = "Testing", .config = "whitelist", .section = "", .text = "1. Start with a permissive configuration (`w:` at the end)\n2. Add ignore rules for problematic services\n3. Monitor logs to verify filtering is working\n4. Gradually refine rules based on actual usage", .status = 0 },
|
|
||||||
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:1702\n```", .status = 0 },
|
|
||||||
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:1702:000000\n```", .status = 0 },
|
|
||||||
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:09C4:000000::::46,58,90,95\n```", .status = 0 },
|
|
||||||
{ .param = "Ignore", .config = "whitelist", .section = "", .text = "```\ni:0500::1234\n```", .status = 0 },
|
|
||||||
{ .param = "Ignore", .config = "whitelist", .section = "", .text = "```\ni:::::2345\n```", .status = 0 },
|
|
||||||
{ .param = "Allow", .config = "whitelist", .section = "", .text = "```\nw:\n```", .status = 0 },
|
|
||||||
{ .param = "No", .config = "whitelist", .section = "", .text = "- Check if you have a catch-all `w:` rule at the end\n- Verify your whitelist rules match your actual CAIDs\n- Check for typos in hexadecimal values\n- Ensure file has proper permissions", .status = 0 },
|
|
||||||
{ .param = "Wrong", .config = "whitelist", .section = "", .text = "- Review rule order (first match wins)\n- Check for overlapping rules\n- Verify ECM lengths are correct\n- Enable debug logging to see which rules are matching", .status = 0 },
|
|
||||||
{ .param = "Performance", .config = "whitelist", .section = "", .text = "- Reduce number of rules\n- Use more specific rules to match faster\n- Remove unused entries\n- Consider using only essential whitelisting", .status = 0 },
|
|
||||||
{ .param = "oscam", .config = "whitelist", .section = "", .text = "The whitelist file works in conjunction with oscam.conf settings:\n\n```ini\n[global]\n# Enable ECM length filtering\necmwhitelist = /path/to/oscam.whitelist\n```", .status = 0 },
|
|
||||||
{ .param = "Related", .config = "whitelist", .section = "", .text = "- **oscam.conf**: Main configuration file\n- **oscam.services**: Service definitions\n- **oscam.user**: User-specific settings that may override whitelist behavior", .status = 0 },
|
|
||||||
{ .param = "Combining", .config = "whitelist", .section = "", .text = "```\n# Whitelist specific CAID, provider, and ECM length\nw:1702:000000::::93\n\n# Ignore specific CAID and service combination\ni:0500:123456:1234\n```", .status = 0 },
|
|
||||||
{ .param = "Provider-Specific", .config = "whitelist", .section = "", .text = "```\n# Allow HD+ with all providers\nw:1830:000000::::92\nw:1830:003411::::92\nw:1830:008011::::92\n\n# Block specific problematic provider\ni:0500:BADPROV\n```", .status = 0 },
|
|
||||||
{ .param = "Service-Level", .config = "whitelist", .section = "", .text = "```\n# Allow specific services only\nw:1702::SERVICE1\nw:1702::SERVICE2\n\n# Block all others (no catch-all w:)\n```", .status = 0 },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int32_t wiki_count(void)
|
int32_t wiki_count(void)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user